我正在尝试使用龙卷风事件循环并行执行一系列任务。
因此,我正在创建一个事件循环并创建一个由@ gen.coroutine装饰的方法,该方法将生成gen.Task调用的列表。
from tornado import ioloop, gen
class MyClass(object):
@gen.coroutine
def echo(text):
print text
return gen.Return()
@gen.coroutine
def send_messages(self, number):
yield [gen.Task(self.echo, x) for x in xrange(number)]
self.loop.stop()
def __init__(self):
self.loop = ioloop.IOLoop()
self.loop.add_callback(self.send_messages, 3)
self.loop.start()
MyClass()
对我来说似乎可以,但是不起作用。运行此文件时,在tornado / concurrent.py中收到“ TypeError:'NoneType'对象不可迭代”错误。
知道我在做什么错吗?
为了帮助调试,我发现将pdb放在send_messages()方法中的某处并执行self._echo(“ test”)。result()很有帮助。
最佳答案
您的函数签名错误,因此要破坏functools.partial
绑定:
@gen.coroutine
def echo(text): # <----- MISSING self
print text
return gen.Return()
添加
self
,您就可以开始了。关于python - 产生多个gen时, Tornado 事件循环引发“NoneType对象不可迭代”。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17711237/