将 concurrent.futures 与龙卷风事件循环一起使用?

Use concurrent.futures with tornado event loop?

如何在 Tornado 应用程序中偶尔使用线程和 futures?

我的服务器偶尔需要在单独的线程或进程中执行 运行 长 运行 任务(任务释放 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)

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

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

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