【问题标题】:zappa scheduling with Python使用 Python 进行 zappa 调度
【发布时间】:2017-10-27 18:05:28
【问题描述】:

我正在运行此代码以使用 Twilio 发送短信...

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

我的应用程序使用 Python 的 Zappa 托管在 AWS Lambda 上。问题是我需要能够安排此消息在未来 10 分钟内发送。

Zappa 提供任务执行,但他们的文档不清楚应该如何完成这样的事情。

感谢您的帮助。

【问题讨论】:

标签: python twilio aws-lambda amazon-sns zappa


【解决方案1】:

这不是 Zappa 目前直接支持的。您需要对可用的调度系统进行某种破解。

安排一个事件每分钟运行一次:

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

您的代码可以遵循这些原则。

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(...)

【讨论】:

  • 有趣。这是否需要服务器一直在运行? Lambda 在一段时间后死亡。
  • Cloudwatch 将每分钟调用一次该函数。交易是在调用函数时,对经过的时间进行简单的检查。如果经过的时间通过检查,则发送消息。
  • 为什么不用 "expression": "rate(10 minutes)" 代替?
  • 那么你不能确定worker会在提交后的十分钟内运行你的任务。计划每 10 分钟检查一次任务。您可能在此期间的某个时间发送了您的任务。如果一个人可以忍受一些明显的延迟,那就可以了。
【解决方案2】:

我为 zappa 创建了一个数据库驱动的任务队列。 https://github.com/andytwoods/zappa-call-later 。早期,但我们正在生产中使用它。

每 X 分钟,(如 @Oluwafemi Sule 的回答中所建议的那样)一个 Zappa 事件会 ping 一个检查任务的函数。任务可以延迟 Y 分钟,重复 Z 次等。

我的解决方案比较粗糙,时间分辨率低,目前水平很低。

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 2016-03-21
    • 2021-08-24
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2019-09-03
    相关资源
    最近更新 更多