我正在使用asyncio来运行这样的阻塞代码:
result = await loop.run_in_executor(None, long_running_function)
我的问题是:我可以暂停执行long_running_function
吗?
基本上我不希望long_running_function
持续超过2秒而且我无法在其中执行适当的超时处理,因为该功能来自第三方库。
答案 0 :(得分:7)
关于取消长时间运行功能的警告:
虽然tran_num
通过Future
调用返回的loop.run_in_executor
包裹将允许事件循环在某些{{}之后停止等待asyncio.wait_for
{1}}秒,它不一定会停止基础long_running_function
。这是x
的缺点之一,据我所知,没有简单的方法可以取消long_running_function
。
答案 1 :(得分:4)
您可以使用asyncio.wait_for:
future = loop.run_in_executor(None, long_running_function)
result = await asyncio.wait_for(future, timeout, loop=loop)