2017-12-26 11 views

Antwort

1

Der einfachste und generische Weg wäre, Ihre Callback-Funktion am Ende des geplanten Jobs hinzuzufügen. Sie können auch auf der Scheduler-Klasse aufbauen, um am Ende der Aufgaben eine self.function_callback() einzufügen.

Schnell Beispiel:

def tick(): 
    print('Tick! The time is: %s' % datetime.now()) 
    time.sleep(10) 
    function_cb() 

def function_cb(): 
    print "CallBack Function" 
    #Do Something 

if __name__ == '__main__': 
    scheduler = AsyncIOScheduler() 
    scheduler.add_job(tick, 'interval', seconds=2) 
    scheduler.start() 
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C')) 
    # Execution will block here until Ctrl+C (Ctrl+Break on Windows) is pressed. 
    try: 
     asyncio.get_event_loop().run_forever() 
    except (KeyboardInterrupt, SystemExit): 
     pass 
     scheduler.shutdown(wait=False) 
+0

Ja stimme ich zu. Ich habe den Autor im gitter-Kanal gefragt und festgestellt, dass dies mit APScheduler nicht möglich ist. Was Sie sagen, ist echt, aber mein Anwendungsfall ist anders, weil der Startvorgang einige Zeit in Anspruch nimmt, also kann ich nicht sicher sein, ob er als abgeschlossen markiert wird, wenn der Scheduler den Job startet. Die einzige Sache, die ich herausfinden kann, ist, einen anderen Job unabhängig hinzuzufügen, um den vollständigen Zustand zu markieren, aber (1) kann es nichts garantieren, (2) es ist hässlich: zwei Jobs für eine Sache. Endlich gab ich es auf, einfach nicht markieren. Danke, als akzeptiert markiert. – FaithReaper

Verwandte Themen