Как найти причину Tornado "BadYieldError: получен неизвестный объект None"
Заглушка кода, которая получает ошибку при втором выходе, приведена ниже: здесь ostream - это tornado.process.Subprocess.STREAM
а также cl
это список websocket.WebSocketHandlers and the function whose body the
S содержит декораторы @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}))
Я не получил эту ошибку на торнадо 4.3, но я получаю эту ошибку на машине, где версия торнадо была 4.0: я предполагаю, что входящая последовательность байтов в ostream идентична, потому что открываемый код python идентичен.
Я только начал играть с торнадо, и мне было интересно, как отлаживать, почему это проблема 4,0, а не 4,3.
1 ответ
Посмотрите документы для WebSocketHandler.write_message.
Изменено в версии 4.3: возвращает будущее, которое можно использовать для управления потоком.
До версии 4.3, write_message
вернул None, поэтому он не может быть использован с yield
, Если вашему приложению требуется управление потоком исходящих сообщений websocket, для него требуется Tornado 4.3 или новее.