如何设置 Gunicorn 的工作人员在使用多处理时共享数据/状态?

Tib*_*ibs 5 python django gunicorn python-multiprocessing

我正在通过 Gunicorn 运行 Django 实例。

在这个 Django 项目中,我有一个视图,它在后台启动一个多处理任务,每 x 毫秒获取一些数据,如果没有收到新请求,则在 x 秒后停止。

使用 runserver,我没有任何问题,我的多重处理继续按预期工作,并且我的视图从该多重处理中获取数据没有任何问题。

但是当我切换到 Gunicorn 时,似乎当我请求视图时,它没有检测到该进程已经在运行,并尝试并行启动一个新进程,返回错误的值。

这是代码。我的视图正在调用 NewReq 函数

import multiprocessing
manager=multiprocessing.Manager()
StateU3 = multiprocessing.Value('i', 0)
def NewReq(ID):
        if StateU3.value==0:
            p=multiprocessing.Process(target=BackgroundProcess)
            p.start()
        ...
        return (Values)
Run Code Online (Sandbox Code Playgroud)

当 Gunicorn 调用该视图时,似乎 StateU3 值不在不同请求之间共享,就像 runserver 那样。

这是我的gunicorn.service 文件

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/home/project
ExecStart=/usr/local/bin/gunicorn --access-logfile - --workers 5 --bind         unix:/home/project/project.sock project.wsgi:application


[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

您有任何线索吗?问题可能出在哪里?工人数量?线程数?