跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 新开一个线程启动 websocket 服务端
未分類
8 5 月 2020

新开一个线程启动 websocket 服务端

新开一个线程启动 websocket 服务端

資深大佬 : mart1nN 9

师父们,是这样:小弟写了一个接口,每次执行这个方法需要在一个新的线程中启动一个简单的 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 一下就可以,然而。。。自闭了。

师父们救命

大佬有話說 (5)

  • 資深大佬 : MoYi123

    这个 loop 要从主线程传进来。

  • 資深大佬 : SingeeKing

    把 loop = asyncio.new_event_loop()、asyncio.set_event_loop(loop) 两行放在 websockets.serve 前面

  • 資深大佬 : jdhao

    2 正解。你遇到的问题正好最近我也遇到了 https://jdhao.github.io/2020/06/07/asyncio_inside_flask/

  • 主 資深大佬 : mart1nN

    @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()又不能执行到接下来的一步进行关闭,所以报错了嵌套字地址只允许使用一次。请问这该咋整

  • 資深大佬 : Latin

    https://github.com/heroku-python/flask-sockets
    别自己写了,用用这个吧

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具