Kev*_*n91 6 python multithreading python-asyncio
我有一个调用asyncio循环的线程,但是这导致了所提到的异常:
RuntimeError: There is no current event loop in thread 'Thread-1'.
Run Code Online (Sandbox Code Playgroud)
这个问题:RuntimeError:异步+ 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()
Run Code Online (Sandbox Code Playgroud)
hoe*_*ing 10
新线程没有事件循环,因此您必须传递并明确设置它:
def worker(ws, loop):
asyncio.set_event_loop(loop)
loop.run_until_complete(ws.start())
if __name__ == '__main__':
ws = Server()
loop = asyncio.new_event_loop()
p = threading.Thread(target=worker, args=(ws, loop,))
p.start()
Run Code Online (Sandbox Code Playgroud)
另外,p.join()由于永远不会停止服务器,因此不会正确终止脚本,因此循环将继续运行,可能会挂起线程。您应该像loop.call_soon_threadsafe(ws.shutdown)加入线程之前那样调用smth ,最好是等待服务器正常关闭。