使用 Django 和 celery 在特定时间安排电子邮件

Posted

技术标签:

【中文标题】使用 Django 和 celery 在特定时间安排电子邮件【英文标题】:Schedule emails on a specific time using Django and celery 【发布时间】:2022-01-06 06:40:36 【问题描述】:

这是我正在寻找的用例:

用户将在我的应用程序上注册 这是一个笔记制作和剩余应用程序 在创建剩余用户时,将输入我的应用程序希望当时向用户发送电子邮件的时间 我必须用芹菜做同样的事 我阅读了几篇帖子和堆栈溢出答案,但没有得到相同的正确答案。

我的应用程序是用 Django 编写的。

【问题讨论】:

【参考方案1】:

当用户创建新提醒时,只需在 celery 中安排发送电子邮件任务。请注意,这是一个简单的解决方案,但它会使用户难以在创建通知时间后更改通知时间。

来自answer:

要在指定的日期和时间执行任务,您可以在调用任务时使用 apply_async 的 eta 属性,如 docs 中所述

your_task.apply_async(kwargs=, eta="your_send_time")

另一种解决方案是每 1 分钟运行一次任务,如果有任何电子邮件要发送,它将检查数据库。你不必为此使用芹菜。类似 Cron 的库应该可以解决问题。例如schedule lib 或django-cron 或Django Commands


编辑:this guy 说你不应该在 Django 中使用 dbader/schedule。

【讨论】:

谢谢你的工作

以上是关于使用 Django 和 celery 在特定时间安排电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Django-celery 和 RabbitMQ 不执行任务

celery+django+redis使用介绍

Django celery crontab 每 30 秒 - 有可能吗?

第一个带有 Celery 的 Django cron

Celery Crontab 中的输出日期调度到 Django 模板

Celery add_periodic_task 阻止 Django 在 uwsgi 环境中运行