• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共43篇

    python3.X - Web - Django3.2.9

关闭

返回栏目

关闭

返回python3.X - Web - Django3.2.9栏目

39 - 扩展 - 定时任务 - django-celery - djcelery版

作者:

贺及楼

成为作者

更新日期:2024-06-13 21:05:22

djcelery

资料

资料 link
pypi https://pypi.org/project/django-celery/
github https://github.com/celery/django-celery

概念

没有名为djcelery的包
有名为django-celery的包
代码引入import djcelery

celery版本 系统 支持
all Linux
4.0以上 Windows ×
4.0以下 Windows
命令 作用
pip install eventlet windows下运行celery 4+版本,要装
pip install folower 监控celery运行任务状态

安装

  1. pip install celery==3.1.26.post2 django-celery==3.2.2 flower==0.9.2
  1. pip install Django-celery==3.3.1 # django3以上的需要安装
  2. pip install Django-celery==3.2.2 # django2

配置 settings.py

  1. import djcelery
  2. # 当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。
  3. djcelery.setup_loader()
  4. #broker是代理人,它负责分发任务给worker去执行。此处用的是Redis作为broker
  5. BROKER_URL = 'redis://127.0.0.1:6379/1'
  6. # 导入目标任务文件 tasks.py ,即每个app包含有 @task 装饰器的函数文件
  7. CELERY_IMPORTS = ('app01.tasks')
  8. # 设置时区
  9. CELERY_TIMEZONE = 'Asia/Shanghai'
  10. CELERY_TASK_SERIALIZER = 'json'
  11. CELERY_RESULT_SERIALIZER = 'json'
  12. CELERY_ACCEPT_CONTENT = ['json']
  13. CELERY_ENABLE_UTC = True
  14. #表示使用了django-celery默认的数据库调度模型,任务执行周期都被存在默认指定的orm数据库中.
  15. CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
  16. # RESULT_BACKEND 结果保存数据库
  17. CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
  18. INSTALLED_APPS = [
  19. 'django.contrib.admin',
  20. 'django.contrib.auth',
  21. 'django.contrib.contenttypes',
  22. 'django.contrib.sessions',
  23. 'django.contrib.messages',
  24. 'django.contrib.staticfiles',
  25. 'app01.apps.App01Config',
  26. 'djcelery', #加入djcelery 也就是为了在django admin里面可一直接配置和查看celery
  27. ]

注册app后就可以生成对应表

  1. python manage.py makemigrations # 不需要make直接下方migrate就可以生成表格
  2. python manage.py migrate
  1. djcelery_crontabschedule
  2. djcelery_intervalschedule
  3. djcelery_periodictask # 记录任务信息表
  4. djcelery_periodictasks
  5. djcelery_taskstate
  6. djcelery_workerstate

继续配置

  1. # 下面是定时任务的设置,我一共配置了三个定时任务.
  2. from celery.schedules import crontab
  3. CELERYBEAT_SCHEDULE = {
  4. #定时任务一: 每24小时周期执行任务(del_redis_data)
  5. u'删除过期的redis数据': {
  6. "task": "app.tasks.del_redis_data",
  7. "schedule": crontab(hour='*/24'),
  8. "args": (),
  9. },
  10. #定时任务二: 每天的凌晨12:30分,执行任务(back_up1)
  11. u'生成日报表': {
  12. 'task': 'app.tasks.back_up1',
  13. 'schedule': crontab(minute=30, hour=0),
  14. "args": ()
  15. },
  16. #定时任务三:每个月的1号的6:00启动,执行任务(back_up2)
  17. u'生成统计报表': {
  18. 'task': 'app.tasks.back_up2',
  19. 'schedule': crontab(hour=6, minute=0, day_of_month='1'),
  20. "args": ()
  21. },
  22. }

tasks.py

在app下新建tasks.py,必须要是tasks.py文件名称,django会自动查找到app下的该文件

  1. # coding=utf-8
  2. from celery import task
  3. @task()
  4. def del_redis_data():
  5. # 此处是一个删除redis数据的操作。具体略过
  6. @task()
  7. def back_up1():
  8. # 此处是一个备份到日报表的操作。具体略过
  9. @task()
  10. def back_up2():
  11. # 此处是一个生成统计报表的操作。具体略过

启动

  1. python manage.py runserver # 启动web服务
  2. python manage.py celery beat -l info # 启动celery beat
  3. python manage.py celery worker -l info # 启动celery woker