并发编程:从阻塞代码到响应式系统的实现
1. 阻塞代码转换为非阻塞代码
在某些情况下,尽管 asyncio 支持以异步方式连接资源,但仍需要使用阻塞调用。例如,当第三方 API 仅提供阻塞调用(如许多数据库库),或者执行长时间运行的计算时,就会出现这种情况。下面我们将学习如何处理阻塞 API 并使其与 asyncio 兼容。
1.1 线程池执行器的使用
处理阻塞代码的有效策略是在单独的线程中运行它。Python 提供了 Executor 接口,用于在单独的线程中运行任务,并使用 futures 监视其进度。可以从 concurrent.futures 模块导入 ThreadPoolExecutor 来初始化它。
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=3)
def wait_and_return(msg):
import time
time.sleep(1)
return msg
executor.submit(wait_and_return, "Hello. executor")
# Result:
# <Future at 0x7ff616ff6748 state=running>
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



