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,看来您必须 await
在 websocket.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.
我正在使用 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,看来您必须 await
在 websocket.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.