3

如何偶尔在 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)
4

1 回答 1

5

您根本不需要特殊f功能,只需生成executor.submit返回的 Future 即可:

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

@gen.coroutine
def my_coroutine(...)
    ...
    future = executor.submit(func, *args, **kwargs)
    result = yield future
于 2015-09-14T15:03:20.557 回答