2011-06-13 55 views
0

我無法弄清楚如何做到這一點。Python時間問題

我想在設定的時間內運行python腳本。並且,我每需要1/10的時間來運行一些東西。問題是這一步可能需要花費任何時間來完成。我無法超越一開始就設定的最長持續時間。

實施例: 持續時間20小時

間隔= 20/10 = 2小時(如果它需要這可以改變)

每隔兩個小時運行功能()。函數()需要0-60分鐘才能完成。然後它睡覺。我怎樣才能使它繼續運行9次,但不超過最大持續時間?

+1

爲什麼不簡單地使用全局定時器?例如,在最初開始時只需在需要時檢查它的值。 – 2011-06-13 19:56:31

+1

您可以查看'signal.alarm'來使用信號。這樣SIGALRM就會在給定的時間間隔內生成,並且您可以設置您的信號處理程序來調用'function'。另外檢查'signal.setitimer'。 – 2011-06-13 19:56:40

回答

2

也許你可以使用信號。這個想法是你設置一個信號處理程序來在SIGALRM生成時被調用。在信號處理程序中,您可以撥打function。然後,您重置鬧鐘並重新執行。這是給你一個想法的一個基本例子。

import signal 
... 
signal.signal(signal.SIGALRM, alarm_handler) # set the signal handler 
signal.alarm(interval)      # set the alarm 
... 
def alarm_handler(signum, stack): 
    # call function 
    function() 

一旦警報響起時,你叫function()然後重置報警:

signal.signal(signal.SIGALRM, alarm_handler) 
signal.alarm(interval) 

或者您可以使用signal.setitimer自動配置區間報警,但我不知道如何將工作大時間片(用於微型馬戲)。

注意:必須從主線程調用signal.alarm()。

0

分叉一個子過程來完成實際的工作;如果作業超過了運行時間限制,則將其終止。