我正在尝试使用龙卷风事件循环并行执行一系列任务。
因此,我正在创建一个事件循环并创建一个由@ 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/

10-12 14:28