使用tornado 6.0.3发现的问题及其解决方法
程序片段如下:
def write_to_south():
while True:
if not global_var.queue_to_south.empty():
the_message = global_var.queue_to_south.get()
dev_id = CommFrame.get_dev_id(the_message)
print(dev_id, the_message)
IoTWebSocket.write_by_termid(the_message, dev_id)
其中最后一句:IoTWebSocket.write_by_termid(the_message, dev_id) 调用了tornado的发送函数。
主程序中,为上面的这个函数建立了一个线程:
t3 = threading.Thread(target=write_to_south)
t3.start()
在旧的tornado版本中,运行这段程序并不会出问题,但改用新的版本以后出现下列运行时错误:
There is no current event loop in thread-3
后来参考网上的一些资料(例如,https://blog.csdn.net/jusang486/article/details/82382358),在函数中增加了event loop,这个问题就不再出现了。修改后的程序如下:
import asyncio
......
def write_to_south():
asyncio.set_event_loop(asyncio.new_event_loop())
while True:
if not global_var.queue_to_south.empty():
the_message = global_var.queue_to_south.get()
dev_id = CommFrame.get_dev_id(the_message)
print(dev_id, the_message)
IoTWebSocket.write_by_termid(the_message, dev_id)
......
t3 = threading.Thread(target=write_to_south)
t3.start()