Python 将concurrent.futures与tornado事件循环一起使用?

Python 将concurrent.futures与tornado事件循环一起使用?,python,concurrency,tornado,concurrent.futures,Python,Concurrency,Tornado,Concurrent.futures,如何在Tornado应用程序中偶尔使用线程和未来 我的服务器偶尔需要在一个单独的线程或进程中运行长时间运行的任务(该任务释放GIL)。我希望使用concurrent.exectutor来完成这项任务 from concurrent.futures import ThreadPoolExecutor executor = ThreadPoolExecutor(10) future = executor.submit(func, *args, **kwargs) 我如何将这个未来整合到龙卷风事件循

如何在Tornado应用程序中偶尔使用线程和未来

我的服务器偶尔需要在一个单独的线程或进程中运行长时间运行的任务(该任务释放GIL)。我希望使用concurrent.exectutor来完成这项任务

from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(10)
future = executor.submit(func, *args, **kwargs)
我如何将这个未来整合到龙卷风事件循环中?理想情况下,这种集成可以与
tornado.gen
coroutines很好地配合使用。我想在不阻碍未来的情况下从未来中让步。实现这一目标的最佳方式是什么

理想情况下,我希望从一个
并发的
未来的
中获得收益

我正在寻找一个函数
f
,它可以实现以下功能

@gen.coroutine
def my_coroutine(...)
    ...
    future = executor.submit(func, *args, **kwargs)
    result = yield f(future)

您根本不需要特殊的
f
函数,只需生成
executor.submit
返回的未来:

from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(10)

@gen.coroutine
def my_coroutine(...)
    ...
    future = executor.submit(func, *args, **kwargs)
    result = yield future

根据文档,这只是假设是可行的,tornado的未来与concurrent.futures是兼容的。我相信这里讨论的兼容性是另一种方式。换一种方式是没有意义的,因为你不能将tornado的未来推到现有的concurrent.futures池中。“当你尝试产生未来(没有任何f)时会发生什么?”啊,@a-jesse-jiry-davis下面的回答证实了你的评论