Gunicorn 在多处理进程和工作进程之间共享内存
Posted
技术标签:
【中文标题】Gunicorn 在多处理进程和工作进程之间共享内存【英文标题】:Gunicorn shared memory between multiprocessing processes and workers 【发布时间】:2015-08-16 00:32:48 【问题描述】:我有一个 python 应用程序,它使用字典作为多个进程之间的共享内存:
from multiprocessing import Manager
manager = Manager()
shared_dict = manager.dict()
REST API 是使用 Flask 实现的。在使用 pywsgi 或简单的 Flask.run 初始化 Flask 服务器时,一切正常。 我决定加入混合独角兽。现在,当我从任何工作人员(即使只有一个工作人员正在运行)访问这个共享字典时,我得到了错误:
message = connection.recv_bytes(256) # 拒绝大消息 IOError: [Errno 35] 资源暂时不可用
我一直在研究 mmap、多处理侦听器和客户端,它们看起来都有很多开销。
【问题讨论】:
【参考方案1】:我不知道具体的错误,但我认为最可能的原因是,当您添加 Web 服务器时,进程会按需初始化,因此 manager_dict
在调用中丢失。如果 dict 不够大并且你可以支付序列化/反序列化的代价,使用redis 内存数据结构存储和py-redis 库是相当简单的。
【讨论】:
以上是关于Gunicorn 在多处理进程和工作进程之间共享内存的主要内容,如果未能解决你的问题,请参考以下文章