Python 龙卷风事件循环引发一个;“非类型对象不可编辑”;当产生多代任务时

Python 龙卷风事件循环引发一个;“非类型对象不可编辑”;当产生多代任务时,python,tornado,Python,Tornado,我正在尝试使用tornado事件循环并行地执行一系列任务。 因此,我创建了一个事件循环并创建了一个方法,由@gen.coroutine修饰,它生成了一个对另一个方法的gen.Task调用列表 from tornado import ioloop, gen class MyClass(object): @gen.coroutine

我正在尝试使用tornado事件循环并行地执行一系列任务。 因此,我创建了一个事件循环并创建了一个方法,由@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’object is not iterable”错误

知道我做错了什么吗


为了帮助调试,我发现将pdb放在send_messages()方法的某个地方并执行self.\u echo(“test”).result()会有很大帮助。

您需要引发异常

class MyClass(object):                                           
    @gen.coroutine                                               
    def echo(text):                                              
        print text                                               
        raise gen.Return()                                      

你的函数签名是错误的,因此破坏了
functools。部分绑定:

@gen.coroutine                                               
def echo(text):      # <----- MISSING self                                 
    print text                                               
    return gen.Return()
@gen.coroutine

def echo(text):#在这种情况下,即使我没有提出/返回任何内容,它也会起作用,但是的,是的,否则我需要提出它。谢谢