在 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