【问题标题】:Trying to make an async function that runs forever using run_forever尝试使用 run_forever 创建一个永远运行的异步函数
【发布时间】:2021-07-22 16:32:48
【问题描述】:

我正在尝试访问 websocket 以收听一些信息,因此我想使用 run_forever 命令继续收听,直到我停止程序,但是当我这样做时,我收到以下错误,有人可以告诉我我是什么做错了吗?

代码:

loop = asyncio.get_event_loop()

async def listen():
    url = "websocket url starting with wss"

    async with websockets.connect(url) as ws:
        msg = await ws.recv()
        print(msg)


loop.run_forever(listen())

错误然后说:

RuntimeWarning: coroutine 'listen' was never awaited
  loop.run_forever(listen())
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
  File "C:\Users\...", line 18, in <module>
    loop.run_forever(listen())
TypeError: run_forever() takes 1 positional argument but 2 were given

【问题讨论】:

  • 只要将监听函数作为参数提供给run_forever,您就正在运行它。试试run_forever(listen)

标签: python asynchronous websocket


【解决方案1】:

我尝试将您的脚本加载到 Python 3.9.6 中,但我看到了您的错误。

这就是我让它运行的方式(您需要输入正确的 URL):

import asyncio, websockets

async def listen():
    url = "websocket url starting with wss"
    async with websockets.connect(url) as ws:
        msg = await ws.recv()
        print(msg)

async def main():
    loop = asyncio.get_event_loop()
    loop.run_forever(await listen())

if __name__ == "__main__":
    asyncio.run(main())

我希望它可以帮助您进一步了解您的计划。

【讨论】:

  • 是的,这正是我想要的!谢谢你:)
  • @kc.chvz 欢迎您,请随时接受我的回答。 :-)
  • 哦,明白了!很抱歉,我是 stackoverflow 的新手 :D,祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2017-07-13
  • 2017-06-08
  • 1970-01-01
相关资源
最近更新 更多