我有一个调用 asyncio 循环的线程,但这会导致上述异常:
RuntimeError: There is no current event loop in thread 'Thread-1'.
这个问题: RuntimeError: There is no current event loop in thread in async + apscheduler 遇到了同样的问题,但是他们引用了我没有的调度程序。
我的代码如下:
def worker(ws):
l1 = asyncio.get_event_loop()
l1.run_until_complete(ws.start())
l2 = asyncio.get_event_loop()
l2.run_forever()
if __name__ == '__main__':
ws = Server()
p = threading.Thread(target=worker,args=(ws,))
p.start()
while True:
try:
#...do sth
except KeyboardInterrupt:
p.join()
exit()
原文由 Kev1n91 发布,翻译遵循 CC BY-SA 4.0 许可协议
新线程没有事件循环,因此您必须明确传递并设置它:
此外,
p.join()
不会正确终止您的脚本,因为您永远不会停止服务器,因此您的循环将继续运行,可能会挂断线程。在加入线程之前,您应该像loop.call_soon_threadsafe(ws.shutdown)
一样调用 smth,理想情况下等待服务器正常关闭。