gpt4 book ai didi

python - RuntimeError : There is no current event loop in thread 'Thread-1' , 多线程和异步错误

转载 作者:太空狗 更新时间:2023-10-30 00:42:40 27 4
gpt4 key购买 nike

我有一个调用异步循环的线程,但这会导致上述异常:

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()

最佳答案

新线程没有事件循环,所以你必须明确地传递和设置它:

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()

此外,p.join() 不会正确终止您的脚本,因为您永远不会停止服务器,所以您的循环将继续运行,可能会挂断线程。在加入线程之前,您应该像 loop.call_soon_threadsafe(ws.shutdown) 那样调用 smth,最好是等待服务器正常关闭。

关于python - RuntimeError : There is no current event loop in thread 'Thread-1' , 多线程和异步错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48725890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com