如何在Tornado应用程序中偶尔使用线程和期货?
我的服务器偶尔需要在单独的线程或进程中运行长时间运行的任务(任务释放GIL。)我想用concurrent.futures exectutor执行此操作
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)
答案 0 :(得分:4)
您根本不需要特殊的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