2009-06-24 9 views
14

可能性の重複:バックグラウンドタスクとして定期的に実行する機能をスケジュールするための最も神託の方法だろう何
Suggestions for a Cron like scheduler in Python?実行Pythonで特定の間隔でタスク

hereのアイディアがいくつかありますが、それらはすべて私にとっては醜いようです。そして不完全です。

Java Timerクラスには非常に完全な解決策があります。誰もが同様のpythonクラスを知っていますか?

答えて

7

多くのプログラマがマルチスレッドコードを回避しようと、それは非常にバグが発生しやすい命令型プログラミングであることから。

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

そして、それは(pygameのと)例えば、あなたの原子炉が提供する基本的な機能のようになります。

pygame.time.set_timer - 繰り返しイベントキュー

+5

"プログラマーの多くは、命令型プログラミングでバグが発生しやすいため、マルチスレッドコードを避けようとしています。" 少し話題はありますが、これはマルチスレッドを避けるための良い理由ではないと思います。鍵は、それを正しく実行し、メモリーの一貫性とロックの意味を完全に理解することです。 私は、この種のプログラミングの経験が限られているプログラマーは、そのような技術をプロダクションコードで使用する前に、その学習と実践に大きく投資することに同意します。 マルチコアプログラミングの時代にそれを避けることは、あなたのリソースを十分に活用したい場合、実際には実行可能な選択肢ではありません。 – Scruffers

+3

@Scruffersマルチスレッドは信じられないほど正しい(難しい)ことができます(http://stackoverflow.com/questions/3830347/can-a-multi-threaded-program-ever-be-deterministic ))、スレッド以外の複数のコアを使用する他の多くの方法があります。 – dbr

2

のPythonでイベントを作成しますスレッドモジュールにはTimerクラスがありますが、これはワンショットタイマーなので、リンクを見ているうちに何かをやるほうがいいでしょう。 http://code.activestate.com/recipes/65222/

あなたはなぜそれが醜いと思いますか、一度あなたがそのようなクラスの使用法を書いたら、Javaのように簡単になります。

などです。あなたが直接使用できるwx.Timerを持っているよりもwxPythonです

7

質問に直接答えていません。 Linux/Unixオペレーティングシステムで

そうするいくつかの方法がありますし、通常私は(OS X上のようなlaunchd)似たようなことはcronに追加したり、その後に

レスポンスを正常に私のプログラム/スクリプトを記述し、ここから質問が始まります。

標準的なPythonのスケジュールモジュールを使用してください - standard library documentationは、いくつかの素晴らしいソリューションを記述しています。

+3

+1:cronを使用してください。 –

+1

"in Python"ソリューションを使用している場合は、スクリプトを実行し続けることを心配する必要があります(再起動、クラッシュなどの後)、cronはこれを不要にし、非常に簡単で信頼性があります。 – dbr

7

multiprocessingモジュールを試してください。

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) 
関連する問題