Ist es möglich, ein Ereignis in Python ohne Multithreading zu planen? Ich versuche, etwas wie die Planung einer Funktion zu erhalten, die alle x Sekunden ausgeführt wird.
Antworten
Zu viele Anzeigen?Sie könnten eine Kombination aus signal.alarm
und ein Signalhandler für SIGALRM
so, dass die Funktion alle 5 Sekunden wiederholt wird.
import signal
def handler(sig, frame):
print ("I am done this time")
signal.alarm(5) #Schedule this to happen again.
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
Die andere Möglichkeit ist die Verwendung der Zeitplan Modul, das mit Python mitgeliefert wird, aber ich weiß nicht, ob es Threads verwendet oder nicht.
Ohne Threading macht es nur selten Sinn, eine Funktion periodisch aufzurufen. Denn Ihr Hauptthread ist durch das Warten blockiert - er tut einfach nichts. Wenn Sie es aber wirklich wollen, können Sie es tun:
import time
for x in range(3):
print('Loop start')
time.sleep(2)
print('Calling some function...')
Ist es das, was Sie wirklich wollen?
Sie könnten verwenden Staudensellerie :
Celery ist ein quelloffener asynchroner Aufgaben-Warteschlange/Auftragswarteschlange basierend auf verteilter Nachrichtenübermittlung. Sie ist auf Echtzeitbetrieb ausgerichtet, aber unterstützt aber auch Scheduling.
T e Arbeitsknoten ausgeführt. Tasks können asynchron (im Hintergrund) oder synchron (warten, bis sie bereit sind).
und ein Codebeispiel:
Sie wollen wahrscheinlich etwas Code von sehen, deshalb hier eine Beispielaufgabe zum Addieren zwei Zahlen:
from celery.decorators import task
@task
def add(x, y):
return x + y
Sie können die Aufgabe in der Hintergrund ausführen oder warten, bis sie beendet ist:
result = add.delay(4, 4) result.wait() # wait for and return the result 8
Dies ist jedoch von allgemeinerer Bedeutung, als es das von Ihnen beschriebene Problem erfordert.