2016-01-27 27 views
7

x分ごとに与えられたメソッドの実行をプログラムする必要があります。x分ごとに関数を実行するにはschedまたはthreading.Timer?

私はそれを行うための2つの方法を見つけました:最初はschedモジュールを使用し、2番目はThreading.Timerを使用しています。

最初の方法

import sched, time 
s = sched.scheduler(time.time, time.sleep) 
def do_something(sc): 
    print "Doing stuff..." 
    # do your stuff 
    sc.enter(60, 1, do_something, (sc,)) 

s.enter(60, 1, do_something, (s,)) 
s.run() 

import threading 

def do_something(sc): 
    print "Doing stuff..." 
    # do your stuff 
    t = threading.Timer(0.5,do_something).start() 

do_something(sc) 

何の違いだとその1、他よりも優れたものがある場合は?

+0

これは 'asyncio'でも行うことができますが、私はそのモジュールでは(まだ)良くありません。 – DainDwarf

答えて

9

これは、Python 2には安全ではありません - Pythonの3.2:

the Python 2.7 sched documentationから:マルチスレッド環境で

schedulerクラスは、スレッドの安全性に対する新しいを挿入できないことを制限があります実行中のスケジューラで現在保留中のタスクの前にタスクを実行し、イベントキューが空になるまでメインスレッドを保持します。代わりに、代わりにthreading.Timerクラスを使用することをお勧めします。 the latest Python 3 sched documentation

から

はバージョン3.3で変更:schedulerクラスを安全にマルチスレッド環境で使用することができます。

+0

Python 3.3の 'sched'実装は、マルチプロセッシング環境でスレッドセーフであると主張しています。おそらく、あなたはそれに応じてあなたの答えを編集する必要があります編集? – rubayeet

関連する問題