我無法弄清楚如何做到這一點。Python時間問題
我想在設定的時間內運行python腳本。並且,我每需要1/10的時間來運行一些東西。問題是這一步可能需要花費任何時間來完成。我無法超越一開始就設定的最長持續時間。
實施例: 持續時間20小時
間隔= 20/10 = 2小時(如果它需要這可以改變)
每隔兩個小時運行功能()。函數()需要0-60分鐘才能完成。然後它睡覺。我怎樣才能使它繼續運行9次,但不超過最大持續時間?
我無法弄清楚如何做到這一點。Python時間問題
我想在設定的時間內運行python腳本。並且,我每需要1/10的時間來運行一些東西。問題是這一步可能需要花費任何時間來完成。我無法超越一開始就設定的最長持續時間。
實施例: 持續時間20小時
間隔= 20/10 = 2小時(如果它需要這可以改變)
每隔兩個小時運行功能()。函數()需要0-60分鐘才能完成。然後它睡覺。我怎樣才能使它繼續運行9次,但不超過最大持續時間?
也許你可以使用信號。這個想法是你設置一個信號處理程序來在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()。
分叉一個子過程來完成實際的工作;如果作業超過了運行時間限制,則將其終止。
爲什麼不簡單地使用全局定時器?例如,在最初開始時只需在需要時檢查它的值。 – 2011-06-13 19:56:31
您可以查看'signal.alarm'來使用信號。這樣SIGALRM就會在給定的時間間隔內生成,並且您可以設置您的信號處理程序來調用'function'。另外檢查'signal.setitimer'。 – 2011-06-13 19:56:40