gpt4 book ai didi

python - django-celery-email 任务未执行

转载 作者:太空狗 更新时间:2023-10-29 21:07:29 26 4
gpt4 key购买 nike

在解决异步电子邮件发送问题时遇到了一点困难。我想使用 celery 和 django 数据库作为后端。因为现在我唯一想使用这个队列管理工具的是电子邮件,所以我也安装了 django-celery-email。

按照说明,我对我的设置文件进行了这样的更新:

import djcelery
djcelery.setup_loader()

INSTALLED_APPS += ('kombu.transport.django',
'djcelery',
'djcelery_email')

BROKER_URL = 'django://'
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'

我正在使用具有此类设置的默认 django SMTP:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'cs*****@gmail.com'
EMAIL_HOST_PASSWORD = '*********'
EMAIL_PORT = 587

我确实为 djcelerykomby 应用运行了迁移。现在,使用默认的 django send_mail 核心方法,不会发送电子邮件。

如果删除 EMAIL_BACKEND 选项,电子邮件发送有效,但非常慢。如果不是为了速度,我一开始就不会考虑让这个过程排队。

我使用 MySQL 数据库作为数据库后端,它的错误日志文件在添加任务时没有显示任何内容,所以我认为这部分没问题。在我看来,我错过了一些基本的安装或配置部分,有经验的 celery 或 djcelery 用户很容易发现这些部分,但像我这样的新手可能会错过。

更新django 外壳解决方法:

>>> from django.core.mail import send_mail
>>> from django.conf import settings
>>> result = send_mail('test send', 'test_send_body_text', settings.EMAIL_HOST_USER, 'hornswf@gmail.com')
>>> result[0].status
u'PENDING'
>>> result[0].ready()
False
>>> result[0].failed()
False
>>> result[0].info
>>> result[0].result

等待 5 分钟后(如果不发送 celery 电子邮件通常需要大约 10-15 秒),我仍然得到:

>>> result[0].status
u'PENDING'

15 分钟后形成最后一次检查(总共 20 个):

>>> result[0].status
u'PENDING'

所以有人可以帮我解决这个问题吗?我坚信这很简单。

此致,谢尔盖·阿加内佐夫。

最佳答案

尝试打开 shell,尝试使用 djcelery 电子邮件后端发送电子邮件并检查结果

它应该是一个标准的 celery AsyncResult,它可以为您提供有关正在发生的事情的更多信息。

引用文档

results 将是一个 celery AsyncResult 对象的列表,您可以忽略这些对象,或用于检查电子邮件发送任务的状态,或者如果需要甚至等待它完成。如果你想使用这些,你必须启用结果后端并在 CELERY_EMAIL_TASK_CONFIG 中将 ignore_result 设置为 False。有关详细信息,请参阅 Celery 文档。

编辑:

通常 PENDING 状态用于等待执行或未知的任务。

任务正在等待执行或未知。任何未知的任务 ID 都暗示处于挂起状态

仔细检查你已经启动了你的 worker :

./manage.py celeryd -B

通常,如果 celery 无法将任务发送到后端,它会抛出错误,但任务会一直挂起,直到工作人员确认它。

关于python - django-celery-email 任务未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com