Gunicorn在多处理过程和工人之间共享内存

xax*_*xax 8 python multiprocessing gunicorn

我有一个python应用程序,它使用字典作为多个进程之间的共享内存:

from multiprocessing import Manager
manager = Manager()
shared_dict = manager.dict()
Run Code Online (Sandbox Code Playgroud)

REST API使用Flask实现.使用pywsgi或简单地使用Flask.run初始化Flask服务器时,一切正常.我决定投入混合炮.现在,当我从任何工作者访问此共享字典时(即使只有一个正在运行),我收到错误:

message = connection.recv_bytes(256)#deput large message
IOError:[Errno 35]资源暂时不可用

我一直在研究mmap,多处理监听器和客户端,它们看起来都是很多开销.

egu*_*aio 1

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