Python 龙卷风事件循环引发一个;“非类型对象不可编辑”;当产生多代任务时
我正在尝试使用tornado事件循环并行地执行一系列任务。 因此,我创建了一个事件循环并创建了一个方法,由@gen.coroutine修饰,它生成了一个对另一个方法的gen.Task调用列表Python 龙卷风事件循环引发一个;“非类型对象不可编辑”;当产生多代任务时,python,tornado,Python,Tornado,我正在尝试使用tornado事件循环并行地执行一系列任务。 因此,我创建了一个事件循环并创建了一个方法,由@gen.coroutine修饰,它生成了一个对另一个方法的gen.Task调用列表 from tornado import ioloop, gen class MyClass(object): @gen.coroutine
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):#在这种情况下,即使我没有提出/返回任何内容,它也会起作用,但是的,是的,否则我需要提出它。谢谢