2012-02-26 11 views
3

命令セット{I}があり、このセット{I} を1分ごとに事前定義された時間に実行したいと思います。 {I}の連続した実行の間に1分の遅延を挿入する方法を尋ねるのではなく、{I}の実行時間とは関係なく毎分{I}命令を開始したいと思います。PYTHON:あらかじめ定義された時間に命令セットを実行する方法

Iは、次のコード


import time 

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

をinderstand場合、単に{I}を実行し、次の一方の端部との間の60秒の遅延を挿入します。本当ですか?代わりに私は指示のセット{I}が毎分(例えば9.00午前、9.01午前、9.02午前など)に始まることを望みます。

Pythonでこのようなタスクを実行することは可能でしょうか?例えば、Crontabを使って毎分実行する{I}というスクリプトを書く方がよいでしょうか? ありがとうございました

+1

非常に特殊なニーズがない限り、crontabはより簡単で信頼性が高いようです。 – delnan

+0

Pythonスケジュールモジュールについて質問していますか? http://docs.python.org/library/sched.html –

+0

あなたのプログラムはこの間隔で実際に何をしていますか? –

答えて

0

すべての命令が同時に実行されるように別々のスレッドをインスタンス化し、遅れたwhileループにそれらをディスパッチする可能性があります。

2

分より細かい解像度が必要ない場合は、cronが最も簡単なオプションになります。さもなければ、あなたはそれのようなものを書き直すことになります。

1分未満の間隔が必要な場合は、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関数が1秒よりも長くかかる場合、次のイベントは所定の時間に実行されません)。非ブロックイベントが必要な場合は、threading.Timerを使用します。

関連する問題