我一直在尝试使用Zappa将Django应用程序部署到AWS Lambda。
在我的其他一些(EC2/EBS托管)Django项目中,如果需要执行一些可能需要一些时间的较重计算(例如发送大量电子邮件,或者只是一些需要一分钟以上的处理),则使用Celery。它是一个任务队列系统,其中任务被发送到队列,可以立即返回响应,工人可以稍后处理任务。
对于运行在Lambda中的Zappa Django应用程序,实现类似Celery的任务排队系统的最佳方法是什么?
Zappa/Lambda支持调度任务,应用程序的模型可以设计为稍后由调度功能完成处理,结果可以保存到DB中。但我认为每分钟轮询一次任务还不够稳健,通常需要立即启动延迟的任务。
有没有一种简单的方法可以立即从Django视图返回响应,并使用带有任意参数的函数(在Django应用程序内部)排队等待稍后执行?
您可以使用SNS来完成。订阅主题的lambda,并在那里发布带有json负载的消息。
我为zappa创建了一个数据库驱动的任务队列。https://github.com/andytwoods/zappa-call-later。早期,但我们正在生产中使用它。
每X分钟,Zappa事件就会ping一个检查任务的函数。任务可以延迟、重复等。