django定时任务模块django-apschuler

python版本:3.7 django版本:3.1 django-apschuler版本:0.5.2
安装apscheduler 模块

pip install apscheduler
pip install django-apscheduler

将 django-apscheduler 加到项目中settings的INSTALLED_APPS中

INSTALLED_APPS = [
 
   ....
 
'django_apscheduler',
 
]

执行迁移命令

python manage.py migrate

会创建两张表:django_apscheduler_djangojob/django_apscheduler_djangojobexecution
创建一个专门定时任务app或者在一元app的view.py中嵌入你的定时任务代码

try:
    scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE)	# timezone是用来设置时区的
    scheduler.add_jobstore(DjangoJobStore(), "default")
    # 'cron', hour = "23", minute = "59"  周期执行
    @register_job(scheduler, 'interval', seconds=3, id="text")   # 每隔3s执行一次
    def text():
        print("我是apscheduler定时任务")

    # register_events(scheduler)	之前版本的django-apschuler需要注册,现在不需要了
    scheduler.start()
    print("任务启动!")
except Exception as e:
    print("定时服务错误,已关闭:%s" % e)
    # 有错误就停止定时器
    scheduler.shutdown()

运行结果如下:
在这里插入图片描述
测试django-apschuler的多线程,在我们的text函数中加入延时:

try:
    scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE)	# timezone是用来设置时区的
    scheduler.add_jobstore(DjangoJobStore(), "default")
    # 'cron', hour = "23", minute = "59"  周期执行
    @register_job(scheduler, 'interval', seconds=3, id="text")   # 每隔3s执行一次
    def text():
    	time.sleep(4)   # 间隔4s输出,测试多线程
        print("我是apscheduler定时任务")

    # register_events(scheduler)	
    scheduler.start()
    print("任务启动!")
except Exception as e:
    print("定时服务错误,已关闭:%s" % e)
    # 有错误就停止定时器
    scheduler.shutdown()

运行结果如下:
在这里插入图片描述
这是因为BackgroundScheduler的默认线程数量为1,当我们之前的job还没有运行结束时无法执行下一个任务,设置最大线程数量为5:

try:
    # 设置最大线程数为5
    job_defaults = {'max_instances': 5}
    scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE, job_defaults=job_defaults)
    scheduler.add_jobstore(DjangoJobStore(), "default")
    # 'cron', hour = "23", minute = "59"  周期执行
    @register_job(scheduler, 'interval', seconds=3, id="text")   # 每隔3s执行一次
    def text():
        time.sleep(4)   # 间隔4s输出,测试多线程
        print("%s我是apscheduler定时任务" % datetime.datetime.now())

    # register_events(scheduler)
    scheduler.start()
    print("任务启动!")
except Exception as e:
    print("定时服务错误,已关闭:%s" % e)
    # 有错误就停止定时器
    scheduler.shutdown()

运行结果如下:
在这里插入图片描述
注意:register_events(scheduler) 之前版本的django-apschuler定时任务需要注册,现在不需要了,网上的相关教程都是说要使用register_events(scheduler)注册定时任务,被坑了许久,最后去GitHub上查看了django-apschuler的相关说明才发现这个已经被删除了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值