我一直试图让 uwsgi python spooler 正常工作很长一段时间。我有一个设置,我在其中运行一个带有两个工作进程的 django 应用程序。我已经尝试设置一个 cron spooler(和一个 timer spooler)以每十分钟运行一次任务,但无论我尝试了何种设置配置,它似乎总是多次注册信号,并多次运行任务。
这就是我运行 uwsgi 的方式:
#!/bin/bash
sudo uwsgi --emperor /etc/uwsgi/vassals --uid http --gid http --enable-threads --pidfile=/tmp/uwsgi.pid --daemonize=/var/log/uwsgi/uwsgi.log
这是我在 /etc/uwsgi/vassals/django.ini 中的 uwsgi vassal 配置:
[uwsgi]
chdir = /home/user/django
module = django.wsgi
master = true
processes = 2
socket = /tmp/uwsgi-django.sock
vacuum = true
pidfile = /tmp/uwsgi-django.pid
daemonize = /home/user/django/log.log
env = DJANGO_SETTINGS_MODULE=django.settings
#lazy-apps = false
#lazy = false
spooler = %(chdir)/tasks
#spooler-processes = 1
#import = django-app/spooler.py
#spooler-import = django-app/spooler.py
shared-import = django-app/spooler.py
(出于隐私原因,我更改了一些路径名)。注释掉的行是各种尝试使其不重复我的信号,但每次似乎都注册信号两次,有时甚至三次(大概在工作人员和单个假脱机进程中)。
[uwsgi-signal] signum 0 registered (wid: 0 modifier1: 0 target: default, any worker)
[uwsgi-signal] signum 1 registered (wid: 1 modifier1: 0 target: default, any worker)
[uwsgi-signal] signum 1 registered (wid: 2 modifier1: 0 target: default, any worker)
有谁知道为什么会发生这种情况,以及如何正确预防?
这是 spooler.py 文件:
@cron(-10, -1, -1, -1, -1)
def periodicUpdate(signal):
print "Running cron job..."
_getStats()
也试过
@timer(600)
def periodicUpdate(signal):
print "Running cron job..."
_getStats()
我也尝试添加target='spooler'
到计时器/cron-decorator,但它似乎并没有什么区别。