2016-01-27 26 views
7

Ich muss die Ausführung einer Give-Methode alle x Minuten programmieren.Um eine Funktion alle x Minuten auszuführen: sched oder threading.Timer?

Ich fand zwei Möglichkeiten, es zu tun: die erste verwendet das Modul sched, und das zweite verwendet Threading.Timer.

Erste Methode:

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() 

Die zweite:

import threading 

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

do_something(sc) 

Was ist der Unterschied, und wenn es eine ist besser als die andere, welche?

+0

Ich denke, das kann auch durch 'asyncio' gemacht werden, aber ich bin (noch) nicht gut mit diesem Modul. – DainDwarf

Antwort

9

Es ist nicht sicher in Python 2 - Python 3.2:

Von the Python 2.7 sched documentation:

In Multi-Threaded-Umgebungen, die scheduler Klasse Einschränkungen hinsichtlich muss Thread-Sicherheit, die Unfähigkeit, eine neue einfügen Aufgabe vor der derzeit in einem laufenden Scheduler anstehenden Aufgabe und Halten des Hauptthreads, bis die Ereigniswarteschlange leer ist. Stattdessen wird stattdessen die Klasse threading.Timer verwendet.

Von the latest Python 3 sched documentation

in Version 3.3 geändert:scheduler Klasse kann sicher in Multi-Threaded-Umgebungen eingesetzt werden.

+0

Die Implementierung von 'sched' in Python 3.3 soll in einer Multiprocessing-Umgebung Thread-sicher sein. Vielleicht bearbeiten Sie Ihre Antwort entsprechend? – rubayeet

Verwandte Themen