How to get to root cause of Tornado "BadYieldError: yielded unknown object None"
How to get to root cause of Tornado "BadYieldError: yielded unknown object None"
在第二次 yield 时出现错误的代码存根如下:这里 ostream 是一个 tornado.process.Subprocess.STREAM
并且 cl
是一个 websocket.WebSocketHandlers and the function whose body the
的列表,其中包含装饰器 @web.asynchronous
和 @gen.coroutine
:
while True:
data = yield self.ostream.read_until(b'CCMM\n')
if data:
data=data[:-1]+" "+str(cntr)
for c in cl:
yield c.write_message(json.dumps({"data":data}))
我在 tornado 4.3 上没有收到此错误,但我在 tornado 版本为 4.0 的机器上收到此错误:我假设 ostream 上的传入字节序列是相同的,因为 python 代码被打开'ed 是相同的。
我刚开始玩龙卷风,想知道如何调试为什么这似乎是 4.0 而不是 4.3 的问题。
看看docs for WebSocketHandler.write_message。
Changed in version 4.3: Returns a Future which can be used for flow control.
在 4.3 版本之前,write_message
返回 None,因此不能与 yield
一起使用。如果您的应用程序需要对传出的 websocket 消息进行流量控制,则需要 Tornado 4.3 或更新版本。
在第二次 yield 时出现错误的代码存根如下:这里 ostream 是一个 tornado.process.Subprocess.STREAM
并且 cl
是一个 websocket.WebSocketHandlers and the function whose body the
的列表,其中包含装饰器 @web.asynchronous
和 @gen.coroutine
:
while True:
data = yield self.ostream.read_until(b'CCMM\n')
if data:
data=data[:-1]+" "+str(cntr)
for c in cl:
yield c.write_message(json.dumps({"data":data}))
我在 tornado 4.3 上没有收到此错误,但我在 tornado 版本为 4.0 的机器上收到此错误:我假设 ostream 上的传入字节序列是相同的,因为 python 代码被打开'ed 是相同的。
我刚开始玩龙卷风,想知道如何调试为什么这似乎是 4.0 而不是 4.3 的问题。
看看docs for WebSocketHandler.write_message。
Changed in version 4.3: Returns a Future which can be used for flow control.
在 4.3 版本之前,write_message
返回 None,因此不能与 yield
一起使用。如果您的应用程序需要对传出的 websocket 消息进行流量控制,则需要 Tornado 4.3 或更新版本。