我有一个Flask应用,其中包含一些用户可修改的配置值,这些配置值存储在数据库中。 这些值不会经常更改,因此我不想每次收到请求时都从数据库中获取它们(每个请求都需要这些值),但是我还需要更改才能立即传播给所有工作人员。>
我为解决此问题提出的两种一般方法是:
shelve
可能是此方法的不错选择。什么是最好的方法?
(注意:该应用程序是由Gunicorn在Heroku Hobby Dyno上提供的。)
答案 0 :(得分:0)
最后,我了解了Python的multiprocessing
模块,该模块提供了一种非常简单的方法来在进程之间共享内存。
在我的情况下,我需要共享一个字符串,所以我用初始化了一个共享字符串
import multiprocessing as mp
...
shared_str = mp.Array('c', 100)
这将为长度为100的共享c字符串创建一个包装器。multiprocessing.Array
构造函数接受一个类型参数(一个ctypes
类或一个type-code string以及一个长度。我可以然后使用shared_str.value
访问共享字符串。
我使用gunicorn
选项运行--preload
,因此在创建我的应用程序时分配了共享内存,然后每个进程都可以使用自己的shared_str
副本来访问它。 / p>
此方法也将适用于其他ctypes
个对象(甚至使用ctypes
也适用于非pickle
个对象)。请参阅multiprocessing
here的文档,尤其是sharedctypes
submodule的文档。