一段时间以来,我一直在尝试让uwsgi python假脱机程序正常工作。我有一个运行django应用程序的设置,其中包含两个工作进程。我曾尝试将cron spooler (和一个计时器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-装饰器中,但似乎没有太多区别。
发布于 2014-01-21 11:21:20
你确定你没有在django.wsgi,settings.py或其他django相关文件中注册其他信号吗?--共享-导入只会加载一次(在主文件中)。
顺便说一句,我不明白你想要实现什么。这不是假脱机程序的工作方式,即使您想将其用作信号处理程序目标,也必须在注册信号时指定它(在装饰器中使用target=' spooler‘)
发布于 2022-01-12 16:04:04
虽然这是一个古老的问题,但我在其他地方找不到答案。我在Flask中使用了这个解决方案,但它应该与Django类似。
在初始化期间(prefork模式),您需要注册一个信号。
uwsgi.register_signal(26, "spooler", periodicUpdate)然后计时器应该看起来像这样:
@timer(600, target='spooler')
def periodicUpdate(signal):
print "Running cron job..."
_getStats()至于评论:
错误“只有master和worker可以注册信号处理程序”是正确的,因为您还没有注册任何信号。
的问题是
‘每当我在django应用程序中加载一个页面时,它都会重新注册它。
这很可能是因为它的工作线程只调用了一次方法(periodicUpdate)。这就是为什么在生成工作进程之前必须注册信号的原因。
https://stackoverflow.com/questions/21245340
复制相似问题