shared_ctx 类似于 [[ctx]],可以在应用程序的整个生命周期内共享状态,不同的是 shared_ctx 可以在多个 [[Sanic]] 进程之间共享数据,以及不支持常规对象,如 str, int, dict, list 等,不过正常可以通过使用 [[multiprocessing]] 的一些方法达到类似需求。
创建共享对象的前提是在主进程 [[listeners]] 中加载:
from multiprocessing import Manager
# 先在主进程中加载@app.main_process_startasync def main_process_start(app): app.shared_ctx.persons = Manager().dict("num": 42)
# 之后就可以调用或修改@app.route("/name")async def main(request, name): app.shared_ctx.persons["name"] = name return json(dict(app.shared_ctx.persons))
@app.route("/my")async def main(request, name): return json(dict(app.shared_ctx.persons))