详解django中使用定时任务的方法
今天介绍在django中使用定时任务的两种方式。
方式一:APScheduler
1)安装:
pipinstallapscheduler
2)使用:
fromapscheduler.schedulerimportScheduler fromdjango.core.cacheimportcache #实例化 sched=Scheduler() #每30秒执行一次 @sched.interval_schedule(seconds=30) defsched_test(): """ 测试-定时将随机数保存到redis中 :return: """ seed="123456789" sa=[] foriinrange(4): sa.append(random.choice(seed)) code=''.join(sa) cache.set("test_"+code,code)
3)启动定时任务
#启动定时任务
sched.start()
方式二:django-crontab
1)安装:
pipinstalldjango-crontab
2)添加配置到INSTALL_APPS中
INSTALLED_APPS=( 'django_crontab', )
3)编写定时函数:
在django的app中新建一个test_crontab.py文件,把需要定时执行的代码放进去
importrandom fromdjango.core.cacheimportcache deftest(): """ 测试-定时将随机数保存到redis中 :return: """ seed="123456789" sa=[] foriinrange(4): sa.append(random.choice(seed)) code=''.join(sa) cache.set("test_"+code,code)
4)编写定时命令
Django为项目中每一个应用下的management/commands目录中名字没有以下划线开始的Python模块都注册了一个manage.py命令,自定义一个命令如下:必须定义一个继承自BaseCommand的Command类,并实现handle方法。
编写appname/management/commands/test.py文件
importrandom fromdjango.core.management.baseimportBaseCommand fromdjango.core.cacheimportcache classCommand(BaseCommand): """ 自定义命令 """ defhandle(self,*args,**options): """ 自定义命令 :return: """ seed="123456789" sa=[] foriinrange(4): sa.append(random.choice(seed)) code=''.join(sa) cache.set("test_"+code,code)
定义完成后,执行pythonmanage.pytest,会执行handle()函数
5)在settings.py中增加配置
#运行定时函数 CRONJOBS=[ ('*/1****','appname.test_crontab.test','>>/home/python/test_crontab.log') ] #运行定时命令 CRONJOBS=[ ('*/1****','django.core.management.call_command',['test'],{},'>>/home/python/test.log'), ]
上面主要有3个参数,分别表示:定时任务执行时间(间隔),待执行定时任务,将定时任务的信息追加到文件中
对于熟悉linux中定时任务crontab的同学可能对上面第一个参数的语法很亲切。上面表示每隔1分钟执行一次代码。
linux中的定时任务crontab的语法如下:
*****command 分钟(0-59)小时(0-23)每个月的哪一天(1-31)月份(1-12)周几(0-6)shell脚本或者命令
例子:
06***commands>>/tmp/test.log#每天早上6点执行,并将信息追加到test.log中 0*/2***commands#每隔2小时执行一次
有兴趣的小伙伴可以深入研究下linux的crontab定时任务。
6)添加并启动定时任务
pythonmanage.pycrontabadd
其它命令:
pythonmanage.pycrontabshow:显示当前的定时任务 pythonmanage.pycrontabremove:删除所有定时任务
今天的定时任务就说到这里,有错误之处,欢迎交流指正!