
师父们,是这样:小弟写了一个接口,每次执行这个方法需要在一个新的线程中启动一个简单的 websocket 服务,代码是这样的:
// 接口中新开线程 t1 = threading.Thread(target=create_websocket) t1.start() async def serve(websocket, path): # 推送消息代码省略 def create_websocket(): start_server = websockets.serve(serve, "localhost", 8765) # asyncio.get_event_loop().run_until_complete(start_server) loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(start_server) 然后一直报错:RuntimeError: There is no current event loop in thread 'Thread-XXX'.
查了很多博客都说 new_event_loop()后 set 一下就可以,然而。。。自闭了。
师父们救命
1 MoYi123 2020 年 6 月 9 日 这个 loop 要从主线程传进来。 |
2 SingeeKing PRO 把 loop = asyncio.new_event_loop()、asyncio.set_event_loop(loop) 两行放在 websockets.serve 前面 |
3 jdhao 2020 年 6 月 10 日 2 楼正解。你遇到的问题正好最近我也遇到了 https://jdhao.github.io/2020/06/07/asyncio_inside_flask/ |
4 mart1nN OP @SingeeKing @jdhao 解决了,谢谢师父。不过又产生了一个新问题 ```python loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) start_server = websockets.serve(serve, "localhost", 8765) loop.run_until_complete(start_server) ``` 由于我的 start_server 只是 serve(serve)函数的调用,所以 serve 方法没有执行就结束了,必须要 loop.run_forever()才能正常使用。但是用了 loop.run_forever()又不能执行到接下来的一步进行关闭,所以报错了嵌套字地址只允许使用一次。请问这该咋整 |
5 Latin 2020 年 6 月 10 日 |