gpt4 book ai didi

python - uWSGI cron-like 接口(interface),基于信号的定时器

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:33 27 4
gpt4 key购买 nike

我正在尝试创建一个类似 cron 的进程,每 60 秒运行一次。我不希望它被每个线程执行。有没有办法指定哪个 uwsgi worker 将响应信号?

我目前将 uwsgi 配置为具有主进程、惰性模式和 2 个具有 2 个线程的工作进程。

我的 wsgi 文件中直接有以下代码。

def sig_test(signum):
print "do this thing" + signum

uwsgi.register_signal(99, "", sig_test)
uwsgi.add_timer(99, 60)

信号注册段在两个线程中运行,并导致以下错误:

Traceback (most recent call last):
File "/var/local/wsgi.wsgi", line 153, in <module>
uwsgi.register_signal(99, "worker 1", sig_test)
ValueError: unable to register signal
Wed Jan 15 16:01:57 2014 - unable to load app 0 (mountpoint='') (callable not found or import error)
Wed Jan 15 16:01:57 2014 - *** no app loaded. going in full dynamic mode ***
Wed Jan 15 16:02:08 2014 - [uwsgi-signal] you have registered this signal in worker 2 memory area, only that process will be able to run it
Wed Jan 15 16:02:08 2014 - error managing signal 99 on worker 1

最佳答案

使用 Python 装饰器:timer可能还有 spool .根据文档,基于信号的装饰器在第一个可用的 worker 中执行信号处理程序。然而,在惰性模式下,应用程序在每个 worker 中分别加载和执行,uWSGI 不够智能,无法只创建一次计时器。最简单的修复方法是使用 shared-import 配置选项并在那里初始化计时器。

关于python - uWSGI cron-like 接口(interface),基于信号的定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com