I am running this code to send a sms message with Twilio...
client.messages.create(
to=form.phone.data,
from_="+1xxxxxxxxxx",
body="This is a text message"
My application is hosted on AWS Lambda using Python's Zappa. The problem is that I need to be able to schedule this message to be sent 10 minutes in the future.
Zappa offers task execution but their documentation is unclear for how something like this should be done.
Thanks for the help.
This isn't something Zappa directly supports at this time. You'll need to perform a hack of some sort around the available scheduling system.
Schedule an event to run every minute:
{
"production": {
...
"events": [{
"function": "your_module.send_msg", // The function to execute
"expression": "rate(1 minute)" // When to execute it (in cron or rate format)
}],
...
}
}
Your code can be along these lines.
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(...)
I made a db driven task queue for zappa. https://github.com/andytwoods/zappa-call-later . Early days, but we are using it in production.
Every X minutes, (as suggested in @Oluwafemi Sule's answer) a Zappa event pings a function that checks for tasks. Tasks can be delayed Y minutes, repeated Z times etc.
My solution is crude in that it has low time resolution, and is quite low level currently.
来源:https://stackoverflow.com/questions/44208455/zappa-scheduling-with-python