Python 2.7中的龙卷风,期货和阻塞函数

时间:2018-01-30 13:41:06

标签: python tornado python-2.x

我正在向朋友展示如何在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)?

0 个答案:

没有答案