2016-05-12 2 views
2

Ich versuche, eine Python-Funktion nach einer bestimmten Zeit ohne Verwendung von Sellerie ausführen. Ich treffe eine URL mit requests, wenn requests eine Ausnahme auslöst, dann nach 60 Sekunden führe ich die gleiche Funktion erneut aus.Führen Sie eine Python-Funktion nach einer bestimmten Zeit ohne Verwendung von Sellerie

def myfun(): 
    try: 
     response = requests.post('url', data=data) 
    except Exception as e: 
     sleep(60) 
     myfun() 

Aber das ist rekursive Funktion und wird Speicher verbrauchen. Ich möchte eine asynchrone Funktion schreiben, um meine Aufgabe auszuführen. Wie kann das gemacht werden?

+0

aber wo kommt Django ins Bild? Das ist ein einfacher Python – e4c5

Antwort

1

Sie können in Python-Multiprozessing ayncronous-Tasks verwenden. Hier ist ein Beispiel

from multiprocessing import Pool 
import time 

def f(x): 
    return x*x 

if __name__ == '__main__': 
    pool = Pool(processes=4)    # start 4 worker processes 

    result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process 
    print result.get(timeout=1)   # prints "100" unless your computer is *very* slow 

    print pool.map(f, range(10))   # prints "[0, 1, 4,..., 81]" 

    it = pool.imap(f, range(10)) 
    print it.next()      # prints "0" 
    print it.next()      # prints "1" 
    print it.next(timeout=1)    # prints "4" unless your computer is *very* slow 

    result = pool.apply_async(time.sleep, (10,)) 
    print result.get(timeout=1)   # raises multiprocessing.TimeoutError 

Lesen Sie die vollständige Dokumentation here.

Verwandte Themen