2012-02-26 66 views
3

我有一組指令,說{I},並且我想在預定義的時間執行這個集{I} ,例如每分鐘。 我不是問如何在連續執行 集合{I}之間插入1分鐘的延遲,我希望獨立於{I}的執行時間每分鐘啓動一次指令{I}。PYTHON:如何在預定義的時間執行一組指令

如果我inderstand以下代碼


import time 

while True: 
    {I} 
    time.sleep(60) 

將簡單地插入的{I}和下面之一的執行的結束之間60秒的延遲。這是真的嗎?相反,我希望每一分鐘(例如上午9點,上午9點01分,上午9.02點等)開始一組指令{I}。

是否有可能在python中執行這樣的任務,或者最好是用{I}編寫一個腳本,比如每隔一分鐘執行一次Crontab? 預先感謝

+1

除非你有非常特殊的需求,crontab看起來更簡單也更可靠,所以... – delnan 2012-02-26 21:30:57

+0

你問關於Python sched模塊嗎? http://docs.python.org/library/sched.html – 2012-02-26 21:47:22

+0

你的程序實際上在這些間隔中做了什麼? – 2012-02-26 21:49:15

回答

0

很可能你必須爲每個指令同時運行的實例化單獨的線程,並且只需在你的延遲while循環中調度它們。

2

如果你不需要比一分鐘更精細的分辨率,cron將是最簡單的選擇。否則,你最終會重寫類似的東西。

如果您需要的時間間隔短於一分鐘,則可以考慮glib庫中的「超時」。它有Python綁定。那麼超時應該可以在單獨的過程中開始任務。

2

類似APScheduler可能會滿足您的需求。 我確定還有其他類似的軟件包。

0

你可以生成一個線程每秒鐘使用threading.Timer

import threading 
import time 

def do_stuff(count): 
    print(count) 
    if c < 10: # Let's build in some way to quit 
     t = threading.Timer(1.0, do_stuff, args=[count+1]) 
     t.start() 

t = threading.Timer(0.0, do_stuff, args=[0]) 
t.start() 
t.join() 

使用sched模塊是另一種可能性,但要注意的是,sched.scheduler.run方法塊的主要過程,直到事件隊列爲空。 (因此,如果do_stuff函數花費的時間超過一秒,則下一個事件將無法按時運行。)如果要使用非阻塞事件,請使用threading.Timer

相關問題