web-dev-qa-db-ja.com

python)で特定の間隔でタスクを実行します

重複の可能性:
PythonのスケジューラのようなCronの提案?

バックグラウンドタスクとして定期的に実行する関数をスケジュールする最もPython的な方法は何でしょうか?いくつかのアイデアがあります ここ 、しかしそれらはすべて私にはかなり醜いようです。そして不完全です。

Java Timer クラスには非常に完全なソリューションがあります。同様のpythonクラスを知っている人はいますか?

15
itsadok

必要なことを実行できる便利なイベントスケジューラがあります。ドキュメントへのリンクは次のとおりです。

http://docs.python.org/library/sched.html

12
dborba

マルチプロセッシング モジュールを試してください。

from multiprocessing import Process
import time

def doWork():
    while True:
        print "working...."
        time.sleep(10)



if __name__ == "__main__":
    p = Process(target=doWork)
    p.start()

    while True:
        time.sleep(60)
9
Tom Willis

マルチスレッドコードは命令型プログラミングで非常にバグが発生しやすいため、多くのプログラマーはマルチスレッドコードを避けようとします。

シングルスレッド環境でスケジュールされたタスクが必要な場合は、おそらく何らかの「 Reactor "」が必要です。 Twisted のような既製のものを使用することをお勧めします。

次に、それはあなたのリアクターによって提供される基本的な機能です、例えば(pygameで):

pygame.time.set_timer-イベントキューにイベントを繰り返し作成します

7
yairchu

質問への直接の回答ではありません。

Linux/Unixオペレーティングシステムでは、これを行う方法はいくつかあります。通常、プログラム/スクリプトを通常どおりに記述し、それをcronまたは同様のものに追加します(OS Xの launchd など)。

質問への回答はここから始まります。

標準を使用python sched module -- 標準ライブラリのドキュメント いくつかの気の利いたソリューションについて説明しています。

7
zeroDivisible

PythonにはスレッドモジュールにTimerクラスがありますが、これはワンショットタイマーなので、リンクを見たときに何かを行う方がよいでしょう。 http://code.activestate.com/recipes/65222/

なぜそれが醜いと思いますか。一度作成すると、そのようなクラスの使用法はJavaの場合と同じくらい簡単になります。

gUI内で使用している場合(例:直接使用できるwx.TimerよりもwxPython

2
Anurag Uniyal