使用tornado 6.0.3发现的问题及其解决方法

使用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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值