【问题标题】:Asynchronous task queue for serverless AWS Lambda / Django / Zappa [duplicate]无服务器 AWS Lambda / Django / Zappa 的异步任务队列 [重复]
【发布时间】:2017-08-17 04:15:04
【问题描述】:

我一直在尝试使用Zappa 将 Django 应用程序部署到 AWS Lambda。

在我的一些其他(EC2/EBS 托管)Django 项目中,如果需要执行一些可能需要一些时间的繁重计算(例如发送大量电子邮件,或者只是一些需要一分钟以上的处理), Celery 被使用。它是一个任务队列系统,任务被发送到队列中,可以立即返回响应,工作人员可以稍后处理任务。

为在 Lambda 中运行的 Zappa-Django 应用程序实现类似 Celery 的任务队列系统的最佳方法是什么?

Zappa/Lambda 支持定时任务,应用程序的模型可以设计成以后可以通过定时函数完成处理并将结果保存到数据库。但是我不认为每分钟轮询一次任务足够强大,经常需要立即启动延迟的任务。

是否有一种简单的方法可以立即从 Django 视图返回响应,并让函数(从 Django 应用程序内部)排队等待稍后执行的任意参数?

【问题讨论】:

    标签: django amazon-web-services aws-lambda zappa


    【解决方案1】:

    你可以做到using SNS。订阅 lambda 到主题并使用 json 有效负载在那里发布消息。

    【讨论】:

    • 我不确定这是否是最佳解决方案。它可以工作,但任务消费者是否必须是在另一个 lambda 函数中运行的单独代码?此外,所有数据都不是 JSON 可序列化的,并且来自 django 应用程序的环境变量等将不可用。
    • Celery 的工作方式相同。任务参数被序列化为 json,另一个进程执行任务。如果需要变量,可以将配置文件包含到“worker”lambda。
    • 谢谢,我会调查的。但它仍然需要另一个 Lamba 函数“部署”吗?也许两个单独的 django-zappa 部署可能是解决方案 - 另一个自动从所有其他代码中剥离,除了任务。
    【解决方案2】:

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

    每 X 分钟,一个 Zappa 事件会 ping 一个检查任务的函数。任务可以延迟、重复等。

    【讨论】:

    • 我最近注意到 Zappa 也有原生异步任务支持,无论是通过 SNS 还是直接 lambda 调用。
    • 绝对,但不幸的是我认为你不能推迟发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多