Python:从未等待协程

Python: Coroutine was never awaited

我正在使用 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()

查看 websockets 模块 documentation,看来您必须 awaitwebsocket.send().

但是,在您的 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.