我正在使用基于 Django 1.6 , Celery 3.0.24 , djcelery 3.0.23 的应用程序。我必须每个月定期发一些邮件。我使用主管运行 celeryd , celerybeat 和 celerycam 。我在djcelery模块 PeriodicTask表中添加了条目(tasks.py文件中给出的任务)。但是t 似乎没有在指定的时间执行。在配置定期任务时是否遗漏了一些内容?请帮忙。提前谢谢。
答案 0 :(得分:0)
好吧,因为你还没有提供任何代码,我将尝试写下你如何完成你所写的类似任务。我的项目结构是这样的:
project
-settings.py
-manage.py
-app
-__init__py
-celery.py
-tasks.py
-views.py
-models.py
我在settings.py
中配置了这样的芹菜:
from __future__ import absolute_import
BROKER_URL = 'pyamqp://guest:guest@wlocalhost:5672//' #read docs
CELERY_IMPORTS = ('app.tasks', )
from celery.schedules import crontab
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
'schedule-name': {
'task': 'app.tasks', # example: 'files.tasks.cleanup'
'schedule': timedelta(seconds=30),
},
}
app目录中的celery.py
代码:
from __future__ import absolute_import
import os
from celery import Celery
import django
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
app = Celery('blackwidow.communication.email_sending_method')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
并更新了该目录中的__init__.py
文件: -
from __future__ import absolute_import
from celery import app as celery_app
tasks.py
目录中app
的代码:
from __future__ import absolute_import
import datetime
from celery.task.base import periodic_task
from django.core.mail import send_mail
@periodic_task(run_every=datetime.timedelta(seconds=30))
def email_sending_method():
send_mail('subject', 'body', 'from_me@admin.com' , ['to_me@admin.com'], fail_silently=False)
我在settings.py
中添加了用于发送邮件的相应凭据/配置,然后在命令提示符下运行了这段代码: -
celery -A app worker -B -l info #I think you missed this.
这应该可以解决问题,它会在每30秒发送一次邮件。