【问题标题】:Python: Coroutine was never awaitedPython:协程从未被期待
【发布时间】:2021-10-29 01:26:58
【问题描述】:

我使用 await 然后在连接时发送一条 websocket 消息,但它一直给我“从未等待过”并且不发送,我尝试将 await 添加到 .send() 函数中,就像这个答案下面要求我这样做,但它会引发 TypeError: data is a dict-like object。

import asyncio
import websockets

logging.basicConfig()
IPAddress = input("Configure IP Address")
Port = input("Configure Port")
P1_UserID = ""
P2_UserID = ""
USERS = set()

async def register_player(websocket):
    global P1_UserID, P2_UserID
    if not P1_UserID:
        P1_UserID = websocket
        P1_UserID.send({"Player": 1})
    elif not P2_UserID:
        P2_UserID = websocket
        P2_UserID.send({"Player": 2})
    print(P1_UserID)
    print(P2_UserID)


async def server(websocket, path):
    await register(websocket)
    try:
        await register_player(websocket)
        async for e in websocket:
            print(e)
    finally:
        pass


start_server = websockets.serve(server, IPAddress, Port)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

【问题讨论】:

标签: python websocket coroutine


【解决方案1】:

查看websockets 模块documentation,看来您必须在websocket.send() 上使用await。

但是,在您的 register_player() 函数中,您分配 P1_UserID = websocket,您不会在下一行中的 send() 上分配 await。

除此之外,传递给websocket.send() 的message 不能是dict,参见here。

尝试将register_player() 更改为以下内容:

async def register_player(websocket):
    global P1_UserID, P2_UserID

    if not P1_UserID:
        P1_UserID = websocket
        await P1_UserID.send(json.dumps({"Player": 1}))
#       ^^^^^                ^^^^^^^^^^
#       This is missing      The message cannot be a
#       in your code.        dict, hence convert it to str.
    elif not P2_UserID:
        P2_UserID = websocket
        await P2_UserID.send(json.dumps({"Player": 2}))
#       ^^^^^                ^^^^^^^^^^
#       Same as above.       Same as above.

【讨论】:

  • 我试过这样做,不幸的是它给出了 TypeError: data is a dict-like object
  • @JoySingh - 您能否发布确切的错误消息和回溯?
  • 我已经更新了答案,websocket.send() 不接受dicts。
  • :') 非常感谢。我真的不太了解python,我正在尝试使用python创建一个服务器lol。
  • @JoySingh - 我很高兴听到,不用担心!我的建议是始终阅读文档,即使一开始很困难。你可以从中学到很多东西。祝你好运!
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2018-06-05
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2018-10-26
相关资源
最近更新 更多