sanic框架解决多进程共享缓存问题

最近在用sanic框架做项目,今天需要处理多进程共享缓存问题,在网上搜索了很多,知道使用multiprocessing模块,但是导入后,直接使用会报错,然后看官网解决问题。

直接看官方文档点我哦

大致意思如下:

Python provides a few methods for exchanging objects(opens new window), synchronizing(opens new window), and sharing state(opens new window) between processes. This usually involves objects from the multiprocessing and ctypes modules.If you are familiar with these objects and how to work with them, you will be happy to know that Sanic provides an API for sharing these objects between your worker processes. If you are not familiar, you are encouraged to read through the Python documentation linked above and try some of the examples before proceeding with implementing shared context.Similar to how application context allows an applicaiton to share state across the lifetime of the application with app.ctx, shared context provides the same for the special objects mentioned above. This context is available as app.shared_ctx and should ONLY be used to share objects intended for this purpose.The shared_ctx will:NOT share regular objects like int, dict, or list
NOT share state between Sanic instances running on different machines
NOT share state to non-worker processes
only share state between server workers managed by the same Manager
Attaching an inappropriate object to shared_ctx will likely result in a warning, and not an error. You should be careful to not accidentally add an unsafe object to shared_ctx as it may not work as expected. If you are directed here because of one of those warnings, you might have accidentally used an unsafe object in shared_ctx.In order to create a shared object you must create it in the main process and attach it inside of the main_process_start listener.

翻译过来如下:

在这里插入图片描述

一个小例子

import multiprocessing
from sanic import HTTPResponse, Sanic, response
from sanic.log import loggerapp = Sanic("Hw-Licence-System")
app.config.REQUEST_TIMEOUT = 180# 创建共享的Manager对象
@app.main_process_start
async def main_process_start(app):app.shared_ctx.cache = multiprocessing.Manager().dict()@app.route("/api/v1/get_data", methods=["GET"])
async def get_data(request):product_name = request.args.get("product_name")shared_cache = request.app.shared_ctx.cache# 尝试从共享缓存中获取数据if product_name in shared_cache:data = shared_cache[product_name]return response.json({"status": True, "data": data})# 存储到缓存logger.info("get data from server")shared_cache[product_name] = "123"# 获取数据并返回if product_name in shared_cache:data = shared_cache[product_name]return response.json({"status": True, "data": data})else:return response.json({"status": False, "message": "Data not found"})if __name__ == "__main__":app.run(host="0.0.0.0", port=3000, workers=4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130791.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02 认识Verilog HDL

02 认识Verilog HDL ‍ 对于Verilog的语言的学习,我认为没必要一开始就从头到尾认真的学习这个语言,把这个语言所有细节都搞清楚也不现实,我们能够看懂当前FPGA的代码的程度就可以了,随着学习FPGA深度的增加,再不断的…

二维材料黑科技——MXene

石墨烯,一种由单层碳原子组成的二维材料被广泛应用且为人熟知,具有优异的电学、力学和光学性能。还有一类二维材料,它们由过渡金属和碳或氮原子组成,叫做MXene。 MXene是材料科学中的一类二维无机化合物。这些材料由几个原子层厚度…

小程序如何设置各种时间参数

在小程序管理员后台->基本设置处,可以设置各种时间。例如待支付提醒时间、待支付取消时间、自动发货时间、自动收货时间、自动评价时间等等。下面具体解释一下各个时间的意思。 1. 待支付提醒时间:在用户下单后,如果一段时间内没有完成支付…

基于SpringBoot的抗疫物资管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 公告信息管理 轮播图管理 物质分类管理 物质信息管理 物质入库管理 物质出库管理 个人信息 前台首页功能实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着现在网络的快速发展,网…

PMC-2/11/05/000/00/00/01/00/0K MAX-4/11/03/128/08/1/1/00

PMC-2/11/05/000/00/00/01/00/0K MAX-4/11/03/128/08/1/1/00 随着越来越多的人远程工作,团队越来越需要从任何地方管理他们的3D打印机和打印作业。MakerBot CloudPrint(以前的MakerBot Cloud)是下一代基于云的3D打印平台,使个人和团队能够通过浏览器和多…

华为云云耀云服务器L实例评测|测试CentOS的网络配置和访问控制

目录 引言 1 理解几个基础概念 2 配置VPC、子网以及路由表 3 配置安全组策略和访问控制规则 3.1 安全组策略和访问控制简介 3.2 配置安全组策略 3.3 安全组的最佳实践 结论 引言 在云计算时代,网络配置和访问控制是确保您的CentOS虚拟机在云环境中安全运行的…

B端企业如何通过软文提升品牌影响力?

生活中我们采购某种商品时总会考虑这类商品行业类的知名品牌,这就是品牌影响力的重要性,B端企业也需要品牌影响力,由于B端企业的特殊性,它更需要通过口碑和声誉的提升增强用户信任。软文就能帮助企业提升品牌影响力,下…

LLaMA Adapter和LLaMA Adapter V2

LLaMA Adapter论文地址: https://arxiv.org/pdf/2303.16199.pdf LLaMA Adapter V2论文地址: https://arxiv.org/pdf/2304.15010.pdf LLaMA Adapter效果展示地址: LLaMA Adapter 双语多模态通用模型 为你写诗 - 知乎 LLaMA Adapter GitH…

Nginx 重新编译添加新的模块

编译安装Nginx的时候,有些模块默认并不会安装,比如http_ssl_module,那么为了让Nginx支持HTTPS,必须添加这个模块。 下面讲解如何在已经安装过后再次添加新的模块。 1、找到安装nginx的源码根目录(即安装包存放目录),…

Vuex获取、修改参数值及异步数据处理

14天阅读挑战赛 学不可以已... 目录 一、Vuex简介 1.1 vuex介绍 1.2 vuex核心 二、Vuex使用 2.1 Vuex安装 2.2 创建store模块 2.3 创建vuex的store实例并注册上面引入的各大模块 三、使用Vuex获取、修改值案例 3.1 创建两个菜单组件 3.2 配置路由 3.3 模拟菜单数据 …

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用…

水库大坝除险加固安全监测系统解决方案

一、系统背景 为贯彻落实《办公厅关于切实加强水库除险加固和运行管护工作的通知》(〔2021〕8号)要求,完成“十四五”小型病险水库除险加固、雨水情测报和大坝安全监测设施建设任务,规范项目管理,消除安全隐患&#xf…