我有一个 Django 应用程序在具有多个进程的 Apache/ModWSGI 服务器后面运行。
我想实现一项功能,其中设置(例如模型字段标签)存储在数据库中并在 UI 中动态更新。
为了避免减慢每个 Django 请求的速度,我不想在每个请求中从数据库中提取所有模型字段名称。我只想首先从 Django 实例加载中提取它们,然后在它们发生更改时更新它们一次。
创建一个 Django 信号来连接我的字段名称模型,并动态更新内存中字段的“详细名称”值是非常简单的。但是,这只会更新该请求的流程。 Apache 运行的其他 N-1 个进程仍将使用旧值。
我如何告诉其他进程更新特定设置?
理想情况下,我想要一种非常轻量级的进程间通信方法,将“字段名称更改”事件推送到其他进程,然后它们将使用该事件并执行更新内存中的值的轻量级任务。
Python 有很多多处理工具,但是有没有专门针对这样的任务的多处理工具,尤其是 Django+Apache?
我很难相信没有人曾经需要让他们的 ModWSGI 进程相互通信,但是当我搜索 Django/Python IPC 工具时,我要么得到标准多处理包的教程,要么得到像 Celery 这样的消息消费服务,这并不完全是我想要的。
我可以使用 WSGIHandler 中的自定义线程自己烘焙一些东西,该线程从共享队列中读取/写入,但我不想重新发明轮子。
我们在 github.com/digitalfabrik/integrea-cms 上也有同样的问题。我们需要跨不同进程的互斥锁。我们的方法是将 Django 缓存与 Redis 后端结合使用。虽然不如原生 Python MP 功能,但它是一种有效的方法。
欢迎更好的想法。