2017-05-26 2 views
0

Ich verwende diesen Code eine SMS-Nachricht mit Twilio senden ...zappa mit Python Scheduling

client.messages.create(
     to=form.phone.data, 
     from_="+1xxxxxxxxxx", 
     body="This is a text message" 

Meine Anwendung auf AWS Lambda mit Python Zappa gehostet wird. Das Problem ist, dass ich in der Lage sein muss, diese Nachricht so zu planen, dass sie 10 Minuten in der Zukunft gesendet wird.

Zappa bietet die Ausführung von Aufgaben, aber ihre Dokumentation ist unklar, wie so etwas zu tun ist.

Danke für die Hilfe.

Antwort

2

Dies unterstützt Zappa derzeit nicht direkt. Sie müssen einen Hack um das verfügbare Planungssystem durchführen.

Zeitplan ein Ereignis jede Minute auszuführen:

{ 
    "production": { 
     ... 
     "events": [{ 
      "function": "your_module.send_msg", // The function to execute 
      "expression": "rate(1 minute)" // When to execute it (in cron or rate format) 
     }], 
     ... 
    } 
} 

Ihr Code kann in diese Richtung sein.

from datetime import datetime 

def send_msg(): 
    form = get_form() 
    elapsed = datetime.now() - form.date_created 
    if 10 < abs(elapsed.total_seconds())/60) < 11: # this is naive 
     client.messages.create(...) 
+0

Interessant. Würde dies erfordern, dass der Server die ganze Zeit läuft? Lambda stirbt nach einer gewissen Zeit. – freefly0313

+0

Cloudwatch ruft die Funktion jede Minute auf. Der Deal ist, wenn die Funktion aufgerufen wird, eine naive Überprüfung erfolgt mit der verstrichenen Zeit. Wenn die verstrichene Zeit die Prüfung besteht, wird die Nachricht gesendet. –

1

Ich machte eine db-gesteuerte Aufgabenwarteschlange für zappa. https://github.com/andytwoods/zappa-call-later. Frühe Tage, aber wir verwenden es in der Produktion.

Alle X Minuten, (wie in @Oluwafemi Sule Antwort vorgeschlagen) ein Zappa-Ereignis pingt eine Funktion, die für Aufgaben überprüft. Aufgaben können um 5 Minuten verzögert werden, Z-mal wiederholt werden usw.

Meine Lösung ist grob, weil sie eine niedrige Zeitauflösung hat und derzeit ziemlich niedrig ist.