2017-05-26 3 views
0

Je suis en cours d'exécution de ce code pour envoyer un message sms avec Twilio ...zappa horaire avec Python

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

Mon application est hébergé sur AWS Lambda en utilisant Zappa Python. Le problème est que je dois être en mesure de programmer ce message pour être envoyé 10 minutes dans le futur.

Zappa propose l'exécution de tâches, mais leur documentation n'est pas claire sur la façon de procéder.

Merci pour l'aide.

Répondre

2

Ce n'est pas quelque chose que Zappa supporte directement pour le moment. Vous devrez effectuer un hack quelconque autour du système de planification disponible.

Planifier un événement pour exécuter toutes les minutes:

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

Votre code peut être le long de ces lignes.

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

Intéressant. Cela nécessiterait-il que le serveur fonctionne tout le temps? Lambda meurt après une période de temps. – freefly0313

+0

Cloudwatch appelle la fonction toutes les minutes. Le deal est quand la fonction est invoquée, une vérification naïve est faite avec le temps écoulé. Si le temps écoulé passe la vérification, le message est envoyé. –

1

J'ai créé une file d'attente de tâches pilotée par db pour zappa. https://github.com/andytwoods/zappa-call-later. Les premiers jours, mais nous l'utilisons dans la production.

Toutes les X minutes, (comme suggéré dans la réponse de @Oluwafemi Sule), un événement Zappa pings une fonction qui vérifie les tâches. Les tâches peuvent être retardées Y minutes, répétées Z fois etc.

Ma solution est grossière en ce qu'elle a une faible résolution temporelle, et est actuellement assez faible.