13、并发编程:从阻塞代码到响应式系统的实现

并发编程:从阻塞代码到响应式系统的实现

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>

1.2 在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值