【发布时间】:2020-05-14 09:06:08
【问题描述】:
程序监听 websocket。当收到某个消息时,我们需要等待 5 秒,然后运行一个 restapi 调用到另一个服务器。
它适用于我可以手动触发的单个 websocket 消息。但是,会有大量的 websocket 消息,我将每秒处理大约 50-100 条消息。不确定我是否要采用正确的方法。我希望 asyncio 也是适合这项工作的工具,或者如果我应该用线程做一些事情。
另外,ws_connect 函数中是否需要“result = await on_message(msg)”或“result = on_message(msg)”?我对 asyncio 完全陌生
提前谢谢....
async def do_long_process(id):
# Need to wait 5 seconds before doing anything
await asyncio.sleep(5)
return requests.post('http://do.action.com/%s', id)
async def on_message(message):
msg = json.loads(message)
if msg['type'] == 'takeaction':
response = await do_long_process(msg['id'])
async def ws_connect():
uri = f'ws://server/ws'
async with websockets.connect(uri) as ws:
while True:
msg = await ws.recv()
result = await on_message(msg)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(ws_connect())
【问题讨论】:
标签: python asynchronous python-asyncio