使用run_in_executor和asyncio时超时处理

时间:2015-12-24 12:08:47

标签: python python-asyncio python-3.5

我正在使用asyncio来运行这样的阻塞代码:

result = await loop.run_in_executor(None, long_running_function)

我的问题是:我可以暂停执行long_running_function吗?

基本上我不希望long_running_function持续超过2秒而且我无法在其中执行适当的超时处理,因为该功能来自第三方库。

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)