时间:2021-05-22
Django 作为后端Web开发框架,有时候我们需要用到定时任务来或者固定频次的任务来执行某段代码,这时我们就要用到Celery了。Django中有一个中间件:Django-celery
环境:
第一步安装:django-celery
第二步:配置celery和任务
创建测试django环境:
django-admin.py createproject testdjango-admin.py startapp demo创建好的项目布局如下:
- proj/ - manage.py - proj/ - __init__.py - celery.py - settings.py - urls.py - demo/ - migrations - __init__.py - admin.py - apps.py - models.py - tasks.py - tests.py - views.py2.1 配置celery.py文件
需要替换的内容,我都在对应的行后提示了,剩下的内容默认就好
创建test/test/celery.py文件,内容如下:
from __future__ import absolute_import, unicode_literalsimport osfrom celery import Celery # set the default Django settings module for the 'celery' program.os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') # “proj.settings”替换为你的项目信息:test.settings app = Celery('proj') # 这里的proj替换为你的项目名称:test # Using a string here means the worker doesn't have to serialize# the configuration object to child processes.# - namespace='CELERY' means all celery-related configuration keys# should have a `CELERY_` prefix.app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs.app.autodiscover_tasks() @app.task(bind=True)def debug_task(self): print('Request: {0!r}'.format(self.request))2.2 配置项目的init.py中配置celery内容
打开test/test/__init_.py文件,添加内容:
from __future__ import absolute_import, unicode_literals # This will make sure the app is always imported when# Django starts so that shared_task will use this app.from .celery import app as celery_app __all__ = ('celery_app',)2.3 在task.py中添加计划任务
编辑test/demo/task.py文件,添加计划任务,内容如下:
# Create your tasks herefrom __future__ import absolute_import, unicode_literalsfrom celery import shared_task @shared_taskdef add(x, y): return x + y @shared_taskdef mul(x, y): return x * y @shared_taskdef xsum(numbers): return sum(numbers)第三步:任务执行
运行django项目: python manage.py runserver
3.1 后台添加计划任务
访问“http://localhost:8000/admin/”,在celery的管理页面里,选择Periodic tasks,进行任务添加。选择对应的任务,设置定时或者周期时间
3.2 启动定时的celery服务
注意:celery依赖redis服务,需要提前运行redis服务:`redis-server`
# 以下两个命令在不同的shell窗口里执行,需要在django的目录下python manager.py celery beat -l info #接收定时任务的命令python manager.py celery worker -l info #执行定时任务的命令,此shell窗口会看到任务的输入信息3.3 启动单次的celery服务
注意:celery依赖redis服务,需要提前运行redis服务:`redis-server`
python manager.py shell # 进到django的shell里from demo.task import mul, xsum # 导入task任务a = mul()b = xsum()# 执行a, b会输出信息a(1,2)b(1)PS:django-crontab实现Django定时任务
django-crontab安装:
pip install django-crontabdjango-crontab加入:只需要将django-crontab加入到settings.py的INSTALLED_APPS即可。如下代码:
INSTALLED_APPS = ('django_crontab',...)django-crontab配置:settings.py中加入django-crontab的命令即可:
CRONJOBS = [ ('47 11 * * *', 'django.core.management.call_command', ['closepoll'],{},'>> /var/run.log'),]格式:
参数1:定时 例如47 11 * * * 表示每天的11时47分执行
参数2:方法的python模块路径,如果执行django-admin命令,则写django.core.management.call_command
参数3:方法的位置参数列表(默认值:[]),如果执行django-admin命令,则填写所需执行的命令,例如我们在polls中已经定义过的closepoll
参数4:方法的关键字参数的dict(默认值:{})
参数5:执行log存放位置(即重定向到文件,默认:'')
django-crontab任务加载:
django-crontab任务加载比较简单,只需要运行 python manage.py crontab add 即可
查看已经激活的任务使用 python manage.py crontab show
删除已经有的任务使用 python manage.py crontab remove
如果你修改了任务记得一定要使用 python manage.py crontab add 这个会更新定时任务
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
起步在《分布式任务队列Celery使用说明》中介绍了在Python中使用Celery来实验异步任务和定时任务功能。本文介绍如何在Django中使用Celery。
假设我们已经搭建好了一个基于SpringBoot项目,首先我们要在Application中设置启用定时任务功能@EnableScheduling。启动定时任务p
【Crontab的基本组成】①系统服务CROND:每分钟都会从配置文件刷新定时任务②配置文件:文件方式设置定时任务③配置工具crontab:用途调整定时任务【配
今天打算在自己的Django应用中添加一个定时任务来定时执行一些定期检查的功能,因此想到了使用django-crontab插件可以满足我的需求,下面就是这个插件
记录下Spring自带的定时任务用法。spring中使用定时任务基于xml配置文件使用定时任务首先配置spring开启定时任务