shared_ctx 类似于 ctx,可以在应用程序的整个生命周期内共享状态,不同的是 shared_ctx 可以在多个 Sanic 进程之间共享数据,以及不支持常规对象,如 str, int, dict, list 等,不过正常可以通过使用 multiprocessing 的一些方法达到类似需求。

创建共享对象的前提是在主进程 main_process_start 中加载:

from multiprocessing import Manager
 
# 先在主进程中加载
@app.main_process_start
async 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))

参考