Gunicorn多进程和工作进程之间的共享内存

9
我有一个使用字典作为多个进程之间共享内存的Python应用程序:
from multiprocessing import Manager
manager = Manager()
shared_dict = manager.dict()

REST API是使用Flask实现的。在使用pywsgi或者简单的Flask.run初始化Flask服务器时,一切都很正常。我决定加入gunicorn,现在当我从任何一个worker(即使只有一个正在运行)访问此共享字典时,就会出现错误:

message = connection.recv_bytes(256) # reject large message
IOError: [Errno 35] Resource temporarily unavailable

我一直在研究mmap、multiprocessing Listener和Client,但它们似乎都需要很多额外的工作。
1个回答

1

我不知道具体的错误,但我认为最可能的原因是当你添加Web服务器时,进程会按需初始化,所以在调用中丢失了manager_dict。如果字典不够大并且您可以支付序列化/反序列化的代价,则使用redis内存数据结构存储与py-redis库相当简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接