2017-07-10 3 views
1

Ich mache eine App in Python, um Texte über Twilio zu senden. Ich verwende flask und es wird in Google App Engine gehostet. Ich habe eine Liste von Nachrichten, die zu einem bestimmten Datum und Uhrzeit gesendet werden müssen, indem ich meine Nachrichtenfunktion anrufe. Was ist ein einfacher Weg, um dies zu erstellen? Ich bin relativ neu in all dem.Planen einer Methode zu bestimmten Zeiten

Ich versuchte Apscheduler, aber es funktionierte nur auf meinem lokalen und nicht auf der App-Engine. Ich habe über Cron-Jobs gelesen, kann aber nichts über bestimmte Daten/Zeiten herausfinden oder wie man beim Ausführen des Jobs Argumente übermittelt.

+0

Was ist die Lautstärke? Sie können einen Cron-Job zum Beispiel alle 10 Minuten ausführen lassen (das hängt davon ab, wie oft Sie Nachrichten senden müssen). Der Cron-Job-Handler, in Ihrem Fall eine Flask-Route, konnte die ausgehenden ausgehenden Nachrichten aus Datastore abrufen und senden. –

+0

Sehr geringe Lautstärke! Sie werden nicht in regelmäßigen Abständen gesendet. Es gibt vielleicht 30 Nachrichten, die zu bestimmten Zeiten in einer bestimmten Woche gesendet werden müssen. Natürlich möchte ich, dass die Lösung zu einem bestimmten Zeitpunkt verallgemeinert wird. –

Antwort

1

Wie in den Kommentaren von Fabio erwähnt, könnten Sie eine Cron-Aufgabe machen, die alle 10 Minuten (oder jede Minute) ausgeführt wird. Ich würde in einen Ordner nach Nachrichten suchen. Wenn Sie ein Dateinamen-Format in diesem Ordner mit dem Datum und die Zeit beginnen würden, könnte man so etwas tun:

Ordnerinhalt:

201707092205_<#message_id> 

Pseudo-Code für das Senden der Nachricht:

intant_when_the_script_is_ran = datetime.now().strftime(format_to_the_minute) 

for file in folder: 
    if intant_when_the_script_is_ran in file 
     with open(file, 'rw') as fh: 
     destination = fh.readline() #reading the fisrt line 
     message = fh.readlines() #reading the rest of the message 
     twilioapi.sendmessage(destination, message) 
     os.remove(file) #the remove could be done in another script to leave some traces 
1

Hier kommt die Google App Engine zum Einsatz. Sie können Cron-Jobs von der App Engine verwenden. Erstellen Sie eine cron.yaml-Datei in Ihrem Projekt.In dieser Datei können Sie alle Arten von Planungsoptionen jeden Tag auf einen Tag in einer Woche in einer bestimmten Zeit festlegen. Im Folgenden ist ein Beispiel

cron: 
- description: "daily summary job" 
    url: /tasks/summary 
    schedule: every 24 hours 
- description: "monday morning mailout" 
    url: /mail/weekly 
    schedule: every monday 09:00 
    timezone: Australia/NSW 
- description: "new daily summary job" 
    url: /tasks/summary 
    schedule: every 24 hours 
    target: beta 

Cron Pläne angegeben werden mit einem einfachen englischen ähnlichen Format Datei cron.yaml.

every 12 hours 
every 5 minutes from 10:00 to 14:00 
every day 00:00 
every monday 09:00 
2nd,third mon,wed,thu of march 17:00 
1st monday of sep,oct,nov 17:00 
1 of jan,april,july,oct 00:00 

für mehr gut erklärt Scheduling-Format bitte this documentation beziehen.

+0

Danke! Ich hatte mir das vorher schon angeschaut, aber ich sah keinen Weg, irgendwelche Argumente weiterzugeben. Gibt es eine Möglichkeit, dies zu tun? Außerdem weiß ich auf der Python-Seite nicht, wie man Funktionen schreibt, die vom Cron-Job aufgerufen werden. –

+0

unter der Cron-Job-URL-Anfrage erstellen Sie eine Task-Warteschlange und schreiben Sie Ihre Funktionen dort, damit es ausgeführt wird, wenn der Cron-Job ausgelöst wird .. –

0

Eine andere Option ist die Verwendung einer Aufgabe, in der Sie die Zeit angeben, zu der die Aufgabe ausgeführt werden soll, indem Sie die Option eta (geschätzte Ankunftszeit) verwenden.

Die Aufgabe wird in der Warteschlange stehen, bis der Zeitpunkt der Ausführung eintrifft, und dann veranlasst GAE, dass die Aufgabe gestartet wird, um die von Ihnen benötigte Verarbeitung wie das Senden einer Textnachricht auszuführen.

Die Aufgaben werden möglicherweise nicht zu der von Ihnen angegebenen Zeit ausgeführt, aber meiner Erfahrung nach liegt sie in der Regel ziemlich nahe beieinander. Sicherlich viel genauer als einen CRON-Job alle 10 Minuten auszuführen.

Dies ist auch viel effizienter als die Verwendung eines CRON-Jobs, da ein CRON-Job alle 10 Minuten eine Anforderung an Ihre App sendet, die Task jedoch nur ausgeführt wird, wenn sie benötigt wird. Wenn Sie eine App mit geringem Volumen haben, kann dies dazu beitragen, dass Sie innerhalb des kostenlosen Kontingents bleiben.

Verwandte Themen