gpt4 book ai didi

python - Tornado 框架。类型错误 : 'Future' object is not callable

转载 作者:太空狗 更新时间:2023-10-29 17:58:36 24 4
gpt4 key购买 nike

我从前一段时间开始学习 Tornado 框架。我遇到了没有经验的用户缺乏文档的问题,并且还检查了 asyncio 模块文档。所以问题是,我在 asyncio 中有一些简单的代码:

    import asyncio

@asyncio.coroutine
def compute(x, y):
print("Compute %s + %s ..." % (x, y))
yield from asyncio.sleep(1.0)
return x + y


@asyncio.coroutine
def print_sum(x, y):
result = yield from compute(x, y)
print("%s + %s = %s" % (x, y, result))


loop = asyncio.get_event_loop()
loop.run_until_complete(print_sum(1, 2))
loop.close()

然后我尝试使用 Tornado 框架制作同样的东西:

from tornado.ioloop import IOLoop
from tornado import gen

@gen.coroutine
def compute(x, y):
print("Compute %s + %s ..." % (x, y))
yield gen.sleep(1.0)
return (x+y)

@gen.coroutine
def print_sum(x, y):
result = yield compute(x, y)
print("%s + %s = %s" % (x, y, result))

IOLoop.instance().run_sync(print_sum(1,2))

但不幸的是 Tornado 代码引发了这样一个异常:

 Compute 1 + 2 ...
Traceback (most recent call last):
File "tornado_coroutine.py", line 19, in <module>
IOLoop.instance().run_sync(print_sum(1, 2))
File "C:\Python34\lib\site-packages\tornado\ioloop.py", line 421, in run_sync
return future_cell[0].result()
File "C:\Python34\lib\site-packages\tornado\concurrent.py", line 209, in resul
t
raise_exc_info(self._exc_info)
File "<string>", line 3, in raise_exc_info
File "C:\Python34\lib\site-packages\tornado\ioloop.py", line 402, in run
result = func()
TypeError: 'Future' object is not callable

也许 IOLoop 会在所有协程都返回值后尝试进行新的“循环”?

最佳答案

run_sync 将函数(或其他“可调用”)作为参数。您正在就地调用函数,然后将结果作为参数给出。您可以简单地使用 lambda 创建一个匿名函数:

IOLoop.instance().run_sync(lambda: print_sum(1,2))

关于python - Tornado 框架。类型错误 : 'Future' object is not callable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29645115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com