2
我想要一個類似cron的進程,每60秒運行一次。我不希望它被每個線程執行。有沒有辦法指定哪個uwsgi工作人員會對信號做出反應?uWSGI類似cron的接口,基於信號的定時器
我目前有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
uwsgi被配置爲使用'懶惰模式'。根據文檔,懶惰模式_將指示uWSGI在每個worker_之後加載應用程序。這導致在兩個不同信號上設置多個定時器。 如果我禁用懶惰模式,然後裝飾(和我上面的代碼)工作正常。 – kevlarkevin
@kevlarkevin編輯了我的答案 – jwalker