python - UWSGI 计时器和 cron 装饰器运行重复作业

标签 python timer cron uwsgi spooler

我一直在尝试让 uwsgi python 假脱机程序正常工作很长一段时间。我有一个设置,其中我运行一个带有两个工作进程的 django 应用程序。我已经尝试设置一个 cron 后台处理程序(和一个计时器后台处理程序)每十分钟运行一次任务,但无论我尝试过什么样的设置配置,它似乎总是多次注册信号,并多次运行任务。

这就是我运行 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,但似乎没有太大区别。

最佳答案

你确定你没有在 django.wsgi、settings.py 或其他 django 相关文件中注册其他信号吗? --shared-import 只会加载一次(在 master 中)。

顺便说一句,我不明白你想要完成什么。这不是假脱机程序应该如何工作的,即使你想将它用作信号处理程序目标,你也必须在注册信号时指定它(在装饰器中使用 target='spooler')

关于python - UWSGI 计时器和 cron 装饰器运行重复作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245340/

相关文章:

python - 禁用 PyYAML 值转换

linux - cron 作业之一未运行

php - Laravel - 如何每分钟运行一个函数/ Controller ? (任务调度)

python - 索引错误: list index out of range - Opening file from cli - argv[1]

python - 在numpy数组中查找大量满足条件的连续值

python - 使用 rdflib python 使用 sparql DELETE 查询时出错

Python:替换函数以编辑文件

C++ 只运行一段时间

linux - Linux i2c delete_device

c# - 使用响应式(Reactive)扩展按计划运行任务