2013-01-13 68 views
1

我有一個python程序,我想每10秒運行一次,就像cron作業一樣。我不能在一個循環中使用睡眠,因爲時間間隔會變得不確定。我現在這樣做的方式是這樣的:Ubuntu上的Python Cron作業

interval = 10.0 
next = time.time() 

while True: 
    now = time.time() 
    if now < next: 
     time.sleep(next - now) 
     t = Thread(target=control_lights,) 
     t.start()# start a thread 
    next += interval 

它生成一個執行contro_lights函數的新線程。問題是隨着時間的推移,python進程的數量會不斷增加,並佔用內存/ CPU。有沒有什麼好方法可以做到這一點?非常感謝

+0

爲什麼不讓'cron'做到這一點? – Blender

+1

@Blender:可能是因爲'cron'不能每分鐘運行一次以上。 –

回答

1

看看一個名爲The Fat Controller的程序,它是一個類似於CRON的調度程序,但有很多選項。間隔時間可以從前一次運行結束時(例如for循環)或每隔x秒定期測量一次,我認爲這是您想要的。在這種情況下特別有用的是,你可以告訴肥胖控制器做什麼如果在該過程中的一個比x秒需要更長的時間:

  • 運行一個新的實例反正(增加並行處理直至指定的最大值)
  • 等待前一個完成
  • 殺了前一個,並開始一個新的

應該有大量的關於如何得到它成立的文檔中的信息。

1

可能會嘗試使用supervisord或上帝爲這個腳本?這是非常簡單的使用和控制類似UNIX的操作系統上的一些進程

0

您可以每10秒運行一次cron作業,只需將第二個參數設置爲「0/10」即可。它會在0,10,20等上運行

#run every 10 seconds from mon-fri, between 8-17 
CronTrigger(day_of_week='mon-fri', hour='8-17', second='0/10')