【发布时间】:2017-01-04 02:50:30
【问题描述】:
我正在使用@gen.coroutine 装饰器为 GET 请求提供异步协程的 Python3 tornado Web 服务器。我想使用库中的这个函数:
@gen.coroutine
def foo(x):
yield do_something(x)
这很简单:
@gen.coroutine
def get(self):
x = self.some_parameter
yield response(foo(x))
现在假设有多个相同类型的函数foo1、foo2等。我想做...foo3(foo2(foo1(x).result()).result())... 和yield 之类的事情,而不仅仅是get 方法中的response(foo(x))。
我认为使用reduce 和result 方法会很容易。但是,由于tornado 的工作方式,我无法强制foos 使用result 方法返回某些内容。这意味着yield reduce(...) 给出错误:“DummyFuture 不支持结果阻塞”。从 SO 和其他地方的其他答案中,我知道我将不得不使用 IOLoop 或其他我不太了解的东西,并且...
...我的问题是,我如何避免从 get 方法评估 all foos 和 yield 未评估的块?
编辑:这不是this question 的重复,因为我想:1. 嵌套很多函数,2. 尝试 not 立即评估。
【问题讨论】:
-
如果您的意思是返回一个模拟嵌套的函数(类似)对象,那么this 是正确的副本
标签: python python-3.x generator tornado