我正在处理类似于以下代码的代码。有时程序停止工作,或者我收到有关 socketio 会话访问的奇怪错误。慢慢地我觉得这可能是比赛条件。
它的更多伪代码。我想证明,我从多个协程访问全局共享状态和 socketio 会话。
import asyncio as aio
from aiohttp import web
import socketio
app = web.Application()
sio = socketio.AsyncServer()
app["sockets"] = []
@sio.on("connect")
async def connect(sid):
app["sockets"].append(sid)
@sio.on("disconnect")
async def disconnect(sid):
app["sockets"].remove(sid)
@sio.on("set session")
async def set_session(sid, arg):
await sio.save_session(sid, {"arg": arg})
async def session_route(req):
data = await req.json()
for sid in app["sockets"]:
await sio.save_session(sid, {"arg": data["arg"]})
return web.Response(status=200)
if __name__ == '__main__':
web.run_app(app)