在 Celery 任务中使用 Django 的 ORM

Posted

技术标签:

【中文标题】在 Celery 任务中使用 Django 的 ORM【英文标题】:Using Django's ORM in a Celery Task 【发布时间】:2011-10-07 18:15:17 【问题描述】:

Celery 任务如何访问 Django 数据库抽象 API?这是否需要使用独立 Django ORM 使用的策略之一从头开始编码,还是有更简化的内置方式或常见做法?

似乎没有人问这个问题。然而,对我来说,这是基本的。

这个example 暗示这没什么大不了的,但是有人可以解释一下 Celery 和 Django 之间的会话管理和 ORM 作用域是如何工作的吗?

【问题讨论】:

【参考方案1】:

默认情况下,Celery 会腌制其任务参数。 Django 模型实例也可以腌制。

问题在于,酸洗模型实例就像拍摄它的快照当时。 Unpickling 不会触及数据库。

我想这是好是坏取决于您的需求。我倾向于将主键发送到我的任务中并重新查询相关对象。

【讨论】:

【参考方案2】:

你可能想看看django-celery。

当作为 celery 任务进行工作时,您希望将所有详细信息传递给 celery,例如发送电子邮件,您需要传入“from”、“to”、“subject”和“身体”。

如果您想通知用户该操作已完成,您可能需要查看 Django 中的 messages framework 之类的内容。

希望对你有帮助。

【讨论】:

django-celery 不再需要。 docs.celeryproject.org/en/latest/django/… 如果您不想访问数据库,则不再需要 @user1252307。

以上是关于在 Celery 任务中使用 Django 的 ORM的主要内容,如果未能解决你的问题,请参考以下文章

如何在任务中获取芹菜结果模型(使用 django-celery-results)

Celery 在远程任务上使用 Django Result Backend

在使用 django_celery_beat 设置的 Django 视图中使用 Celery 定期任务输出,并使用 Redis 设置缓存

异步任务利器Celery在django项目中使用Celery

在 Django 单元测试中使用 mock 修补 celery 任务

celery:celery介绍架构基本使用,celery执行异步任务延迟任务定时任务,django中使用celery。