2013-03-22 245 views
1

我有這個Django cron作業腳本(我使用的是kronos,這很棒)。防止多次執行

由於我每分鐘觸發一次這個工作,我想確保沒有另一個腳本實例已經運行。如果有以前的作業正在運行,那麼我想跳過當前的執行。

我知道我能做到這一點與鎖文件,但是這並不是非常可靠的,當你在執行(你必須清除鎖定文件)的中間重新啓動可能會造成問題,等

什麼使用Python(在這種情況下,Django)做到這一點的最好方法是什麼?

編輯:我的目標是Linux,對此感到遺憾。

+1

在什麼平臺上?現在,在大多數Unix/Linux平臺上,鎖定文件是完全可靠的:使用os.open和O_CREAT | O_EXCL,這可以確保只有一個進程可以訪問該文件以及與基於內存或交換的文件系統相對應的路徑(如tmpfs :Solaris上的/ tmp,Linux上的/ run或/ var/run)解決了您的重新啓動問題。唯一的潛在問題是如果你的進程崩潰,不清理等... – isedev 2013-03-22 01:45:50

+0

另一種選擇是使用基於內核的信號量。 – isedev 2013-03-22 01:47:48

+0

對不起,Linux :-) – kolrie 2013-03-22 02:50:25

回答

0

有一個Django應用程序的位置:https://github.com/jsocol/django-cronjobs

也可在PIP爲cronjobs

以防萬一你直接去點;您註冊使用的裝飾工作,像這樣:

# myapp/cron.py 
import cronjobs 

@cronjobs.register 
def periodic_task(): 
    pass 

然後通過運行命令:

$ ./manage.py cron periodic_task 

它的工作鎖定在默認情況下,但是,當你申請的裝飾,你可以禁用它:

@register(lock=False)