python – Celery和Django的周期性任务
发布时间:2020-12-20 13:40:07 所属栏目:Python 来源:网络整理
导读:我在使用Celery 3.1.8,Django 1.6.1和RabbitMQ进行定期任务时遇到了麻烦.我对当前的文档有点困惑,因为据我所知,不再需要 django-celery来让Celery与Django一起运行.我有一种感觉,我没有正确地运行工作人员,但在寻找SO和google搜索解决方案之后,我需要帮助.有
我在使用Celery 3.1.8,Django 1.6.1和RabbitMQ进行定期任务时遇到了麻烦.我对当前的文档有点困惑,因为据我所知,不再需要
django-celery来让Celery与Django一起运行.我有一种感觉,我没有正确地运行工作人员,但在寻找SO和google搜索解决方案之后,我需要帮助.有人能指出我正确的方向吗?
settings.py(不确定我是否需要这个,因为我的任务上有@periodic_task装饰器) CELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': 'tasks.send_test_email','schedule': datetime.timedelta(seconds=30) },} 我的应用程序(celery.py) from __future__ import absolute_import import os from celery import Celery from django.conf import settings # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE','app.settings') app = Celery('app',broker='amqp://',backend='amqp://',include=['app.tasks']) app.conf.update( CELERY_TASK_RESULT_EXPIRES=3600,CELERY_TIMEZONE='Europe/Oslo',) if __name__ == '__main__': app.start() # Using a string here means the worker will not have to # pickle the object when using Windows. app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request)) 定期任务(tasks.py) from __future__ import absolute_import from celery.task import periodic_task import datetime @periodic_task(run_every=datetime.timedelta(minutes=1)) def send_test_email(): print "This is a periodic task from celery" 在命令行上,我正在执行worker: celery worker -A app -l info celery beat 解决方法
其他一些解决方案是使用@periodic_task
celery decorator
from celery.schedules import crontab @periodic_task(run_every=crontab(minute=0,hour=1)) def my_task(): print 'my_task' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |