django-celery-email任务未执行

Ser*_* jr 8 python django django-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'
Run Code Online (Sandbox Code Playgroud)

我正在使用默认的django SMTP这样的设置:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'cs*****@gmail.com'
EMAIL_HOST_PASSWORD = '*********'
EMAIL_PORT = 587
Run Code Online (Sandbox Code Playgroud)

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

如果删除EMAIL_BACKEND选项,电子邮件发送工作,但非常慢.如果不是速度,我不会首先考虑排队这个过程.

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

更新 django shell解决方法:

>>> 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
Run Code Online (Sandbox Code Playgroud)

等待5分钟后(没有芹菜电子邮件发送通常需要大约10-15秒),我仍然得到:

>>> result[0].status
u'PENDING'
Run Code Online (Sandbox Code Playgroud)

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

>>> result[0].status
u'PENDING'
Run Code Online (Sandbox Code Playgroud)

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

谢谢你,谢尔盖阿加内佐夫.

DRC*_*DRC 5

尝试打开外壳,尝试发送带有djcelery电子邮件后端的电子邮件并检查result

它应该是标准芹菜AsyncResult,可以为您提供更多有关发生的情况的信息。

引用文档

results will be a list of celery AsyncResult objects that you may ignore, or use to check the status of the email delivery task, or even wait for it to complete if want. You have to enable a result backend and set ignore_result to False in CELERY_EMAIL_TASK_CONFIG if you want to use these. See the Celery docs for more info.

编辑

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

Task is waiting for execution or unknown. Any task id that is not known is implied to be in the pending state

仔细检查您已经开始工作了:

./manage.py celeryd -B
Run Code Online (Sandbox Code Playgroud)

通常,如果celery无法将任务发送到后端,则会引发错误,但任务将保持待处理状态,直到工人确认它为止。