【发布时间】:2015-09-14 14:16:28
【问题描述】:
如何偶尔在 Tornado 应用程序中使用线程和期货?
我的服务器偶尔需要在单独的线程或进程中运行长时间运行的任务(该任务会释放 GIL。)我想使用 concurrent.futures 执行器来执行此操作
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(10)
future = executor.submit(func, *args, **kwargs)
如何将这个未来集成到 Tornado 事件循环中?理想情况下,这种集成与 tornado.gen 协程配合得很好。我想从未来中屈服,而不是阻碍它。实现这一目标的最佳方法是什么?
理想情况下,我想从concurrent Future 屈服。
我正在寻找一个函数f,它可以实现以下目标
@gen.coroutine
def my_coroutine(...)
...
future = executor.submit(func, *args, **kwargs)
result = yield f(future)
【问题讨论】:
-
这只是假设工作,根据文档,龙卷风的未来与 concurrent.futures tornado.readthedocs.org/en/latest/concurrent.html 兼容
-
我相信那里讨论的兼容性是相反的。
-
采用另一种方式实际上没有任何意义,因为您无法将 Tornado 未来推送到现有的 concurrent.futures 池中。当你尝试 yield future 时会发生什么(没有任何 f)
-
啊,@a-jesse-jiry-davis 下面的回复证实了您的评论
标签: python concurrency tornado concurrent.futures