我正在向朋友展示如何在tornado
中调用阻止函数,我选择了RequestHandler
调用函数的经典示例,该函数可以休眠几秒钟。
def callback(self, future):
print("Resolviendo el future")
self.write(future.result())
self.finish()
@tornado.web.asynchronous
def get(self):
print ("Llamando función que bloquea")
# self.executor is a ThreadPoolExecutor
self.executor.submit(
partial(blocking_function, 10)
).add_done_callback(
lambda future: (
tornado.ioloop.IOLoop.instance().add_callback(
partial(self.callback, future)
)
)
)
print ("Saliendo de función que bloquea")
我还使用RequestHandler
代替gen.coroutine
创建了另一个web.asyncrhonous
,因此她可以看到针对该主题的不同方法。
所以我在Python 2.7(我有futures
)中运行了这个例子,并使用curl
和@coroutine
处理程序发出了一些请求,一切顺利。但是@asyncronous
处理程序挂起并且永远不会进入callback
函数。我使用相同版本的tornado
切换到Python 3.6,一切正常。
我的问题是:futures
套餐是否有限制?我认为它应该与concurrent.futures
完全兼容。或者它可能是Windows的东西(是的,我的朋友使用Windows 10)?