当前位置: 首页 > news >正文

信阳建设监理协会网站科技股

信阳建设监理协会网站,科技股,爱做网站,做网站用哪个服务器好django-crontab 和 django-cron 有时候需要django在后台不断的执行一个任务#xff0c;简单的可以通过中间件来实现#xff0c;但是中间件是根据请求触发的。如果需要定时执行任务#xff0c;则需要使用到一些插件。 django-crontab 和 django-cron 是常用的用于处理定时任…django-crontab 和 django-cron 有时候需要django在后台不断的执行一个任务简单的可以通过中间件来实现但是中间件是根据请求触发的。如果需要定时执行任务则需要使用到一些插件。 django-crontab 和 django-cron 是常用的用于处理定时任务的插件库两者区别在于 django-cron 完全运行在 django 服务器内部的库它通过定期检查当前时间与定义的任务计划是否匹配来执行任务。它不依赖于系统级的cron守护进程而是基于 django 自身的请求周期触发任务检查django-crontab 是利用操作系统的 cron 守护进程来调度任务。用户在 django 项目中定义好任务后 django-crontab 会将这些任务写入到系统的 crontab 文件中。当 cron 守护进程执行任务时实际上会调用 django 管理命令或 url 来执行特定的操作。 django-crontab 使用 django-crontab 需要以下步骤 安装 django-crontab 模块在 settings.py 中注册应用创建定时执行的任务(可以是自定义的函数或自定义的命令)在 settings.py 中配置执行任务执行任务 需要注意的是 django-crontab 只能运行在 linux 环境中且需要使用到 root 权限。另外需要启动 cron 服务 # 查看 cron 服务状态 service cron status # 开启 cron 服务 service cron start # 查看定时任务 crontab -l # 添加定时任务 crontab -e安装 django-crontab pip install django-crontab注册应用 在 settings.py 中注册 django-crontab 应用 INSTALLED_APPS [...django_crontab, ]创建任务 创建定时执行的任务 创建定时执行函数 在任意 app 下均可创建定时执行函数 # app1/task.pydef scheduleTask(): # 定时执行函数from time import strftime, localtimeprint(strftime(%Y-%m-%d %H:%M:%S, localtime()), end)print(执行了scheduleTask函数)def scheduleTaskWithPara(in_str): # 带参数的定时执行函数import datetimenow_time datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S)print(f在 {now_time} 执行了定时函数输入信息{in_str})创建定时执行命令 在任意 app 下创建 management 模块(含有 __init__.py 文件)并在此模块下创建 commands 模块。在 commands 模块下创建具体的执行脚本文件。例如 # app1/management/commands/mycommand1.pyfrom django.core.management.base import BaseCommand, CommandError from time import strftime, localtimeclass Command(BaseCommand):help 这是第一个command测试指令# 为handle中添加参数解析def add_arguments(self, parser):parser.add_argument(-p, # 设置参数的时候 前边携带--param,actionstore,destparam, # 自定义传入的参数键名ssdefaultclose, # 默认的键值helpname of author.,)def handle(self, *args, **options):# print(mycommand1----开始)添加你需要功能访问数据库判断有效性等等...# 例如try:if options[param]:print(strftime(%Y-%m-%d %H:%M:%S, localtime()), end)print(: mycommand1传入的参数为, options[param])except Exception as e:print(12,e)print(CommandError(1111111111111111111111111))# print(mycommand1----结束)# app1/management/commands/mycommand2.pyfrom django.core.management.base import BaseCommand from time import strftime, localtimeclass Command(BaseCommand):help 这是第二个command测试指令# 为handle中添加参数解析def add_arguments(self, parser):parser.add_argument(-p, # 设置参数的时候 前边携带--param,actionstore,destparam, # 自定义传入的参数键名ssdefaultclose, # 默认的键值helpname of author.,)def handle(self, *args, **options):# print(mycommand2----开始)添加你需要功能访问数据库判断有效性等等...# 例如if options[param]:print(strftime(%Y-%m-%d %H:%M:%S, localtime()), end)print(mycommand2传入的参数为, options[param])# print(mycommand2----结束)配置任务 将创建好的定时执行任务配置到 settings.py 中去以方便执行 配置定时执行函数 在 CRONJOBS 列表中添加一个元组第一个元素是执行间隔时间第二个元素是执行任务函数。如没有参数第三个元素是输出处理如有参数第三、四元素分别为传参第五参数是输出处理。例如 CRONJOBS [# 每1分钟执行scheduleTask函数并将执行中的返回的内容全部打印到crontab.log文件中(*/1 * * * *, app1.tasks.scheduleTask, /tmp/crontab.log),(*/1 * * * *, app1.tasks.scheduleTaskWithPara, [James], {}, /tmp/crontab.log), ]配置定时执行命令 类似于定时执行函数将定时执行命令添加到 CRONJOBS 列表中去。区别在于元组的元素定义不同 CRONJOBS [# 每1分钟执行django的自定义命令并将执行中的返回的内容全部打印到crontab.log文件中(*/1 * * * *, django.core.management.call_command, [mycommand1], {param: mycommand1_test}, /home/wangzhipeng/myproject/crontab.log),(*/1 * * * *, django.core.management.call_command, [mycommand2], {param: mycommand2_test}, /home/wangzhipeng/myproject/crontab.log) ]元素1定时 例如*/1 * * * * 表示每隔1分钟执行元素2方法的python模块路径如果执行django-admin命令则写django.core.management.call_command元素3方法的位置参数列表默认值[]如果执行django-admin命令则填写所需执行的命令元素4方法的关键字参数的dict默认值{}元素5执行log存放位置即重定向到文件默认‘’ 配置完成后可以进行测试 python manage.py mycommand1 -p 123 # 2019-05-10 15:10:59: mycommand1传入的参数为 123关于 linux 的 crontab 时间语法 crontab 的时间语法由五部分组成通常为五个 *每一位表示的意思分别为分钟、小时、日、月、星期。 可使用的字符和其意义为 字符含义*代表所有取值范围的数字/代表“每”的意思例如 */5 表示5个单位-代表从某个数字到某个数字,分隔离散的数字 例如 示例含义0 */2 * * *每2个小时0 23-7,9 * * *23点到7点或9点0 11 4 * 1-3每月4号或周一到三的11点0 4 1 1 *1月1日4点0 6 * * *每天6点0 */2 * * *每2小时 执行任务 添加并开启定时任务 python manage.py crontab add查看执行中的定时任务 python manage.py crontab show删除(停止)定时任务 python manage.py crontab remove django-cron django-cron 因为完全基于 django使得使用简单。但是也是这个原因要想使定时任务生效django服务必须一直处于运行状态。 另外 django-cron django-cron会依赖于HTTP请求来触发其内部的任务检查逻辑通过中间件实现。这意味着只有当有用户访问网站或通过其他方式触发HTTP请求时cron任务才可能被执行。 需注意的是dnango-cron 也只能在 linux 系统上运行。 (django-cron英文文档)[https://django-cron.readthedocs.io/en/latest/] 使用 django-cron 需要以下步骤 安装 django-cron 模块在 settings.py 中注册应用进行迁移创建 django_cron 应用所需资源创建定时执行的任务类在 settings.py 中配置执行任务 安装 django-cron pip install django-cron注册应用 在 settings.py 中注册应用 INSTALLED_APPS [# ...django_cron, ]创建 django_cron 资源 python manage.py migrate django_cron创建任务类 和 django-crontab 不同的是 django-cron 的定时任务是一个集成自 django_cron.CronJobBase 的类 # app1/cron.py from django_cron import CronJobBase, Schedule from django.core.management import call_commandclass MyCronJob(CronJobBase):RUN_EVERY_MINS 30 # 每30分钟运行一次schedule Schedule(run_every_minsRUN_EVERY_MINS) # 添加任务执行周期code yourapp.my_cron_job # 唯一标识符def do(self):# 执行的命令或函数call_command(your_management_command) # 如果是管理命令# 或执行任意Python代码my_function()如果需要在指定时间执行任务而不是按周期执行则使用schedule Schedule(run_at_times[11:30, 14:00, 23:15])注意必须使用24小时制。按照周期执行和执行时间执行可以一起使用。schedule Schedule(run_every_minsRUN_EVERY_MINS, run_at_timesRUN_AT_TIMES)。 配置任务 需要在 settings.py 中的 CRON_CLASSES 列表中注册此任务 CRON_CLASSES [app1.cron.MyCronJob, ]执行任务 在 django-cron 中定时任务是在 django 应用运行时触发执行的。如果需要立即运行所有的 cron 任务例如部署新代码后或进行测试时可以手动执行任务。 python manage.py runcrons也可以单独指定手动执行具体的哪个任务类 python manage.py runcrons app1.cron.MyCronJob app1.cron.OtherCronJob如果需要静默执行即不输出相关信息可以添加参数 --silent。 如果需要强制执行可以添加参数 --force。 如果需要查看有哪些任务可以执行而并不真的运行这些任务可以添加参数 --dry-run。 django-apscheduler cron 是基于 unix_like 系统的windows 下使用 APScheduler。APscheduler全称Advanced Python Scheduler它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务固定时间间隔固定时间点日期Linux 下的 Crontab 命令。同时它还支持异步执行、后台执行调度任务。 django-apscheduler 是 APScheduler 的django定制封装插件版专为 django 设计。它的使用流程为 安装注册应用配置执行迁移创建任务初始化调度器并添加任务启动任务 apscheduler英文文档 参考文档定时任务框架APScheduler学习 安装 pip install django-apscheduler注册应用 在 settings.py 中注册 app INSTALLED_APPS [# ...django_apscheduler, ]执行迁移 python manage.py migrateAPScheduler 会在数据库中创建2张表 django_apscheduler_djangojob : 用于存储定时任务django_apscheduler_djangojobexecution : 用于存储每次的执行记录、时长和执行结果等。 创建任务 apscheduler 的任务就是普通的函数可以将需要执行的内容写在函数内部然后使用调度器添加任务即可 def scheduler_task():pass # 这里是任务需要执行的内容创建调度器添加任务 django_apscheduler 是基于 APScheduler 使用的安装了 django_apscheduler 会自动安装 APScheduler。调度器需要使用 apscheduler.schedulers.backgroud.BackgroundScheduler 或 apscheduler.schedulers.blocking.BlockingScheduler 两个类中的一个来实例化调度器。两者区别在于 BackgroundScheduler 会在后台执行而 BlockingScheduler 会在主线程执行进而阻塞主线程。因此常用 BackgroundScheduler 来创建调度器。 from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore, register_job, register_eventsdef init_scheduler():scheduler BackgroundScheduler() # 创建调度器try:scheduler.add_jobstore(DjangoJobStore(), default) # 添加调度器作业存储# 添加定时任务每天0点30分执行一次任务id为test。scheduler.add_job(scheduler_test, cron, hour0, minute30, idtest, replace_existingTrue) # 添加定时任务间隔3秒执行一次scheduler.add_job(scheduler_jog, interval, seconds3, id3_second_job)# 用装饰器的方式添加任务regist_job(scheduler, interval, seconds10, replace_existingTrue, idtask_per_10s)def task_per_10_seconds():print(间隔10秒执行任务)# 注册处理事件register_events(scheduler)# 调度器开始工作计时器开始计时scheduler.start() except Exception as e:print(e)# 报错则调度器终止运行否则会跳过错误任务继续执行scheduler.shutdown() scheduler.add_job(func, triggerNone, argsNone, kwargsNone, idNone, nameNone, misfire_grace_timeundefined, coalesceundefined, max_instancesundefined, next_run_timeundefined, jobstoredefault, executordefault, replace_existingFalse, **trigger_args) 方法可以将任务添加至调度器其参数有 func 必须参数需要执行的任务函数(或可调用对象)trigger 必须参数定时器类型可以是触发器实例或触发器字符串args 和 kwargs传递给任务函数的参数列表和关键字参数字典。主要用于trigger使用字符串时传递具体的定时时间。id 和 name分别用于唯一标识和命名一个任务。如果未提供将自动生成。misfire_grace_time任务错过执行的时间窗口在这个时间段内即使错过了计划执行时间点也会被执行。coalesce布尔值表示当任务被错过多次后是否合并执行只执行一次而不是多次。max_instances同一时间内允许的最大并发执行实例数。next_run_time手动指定下一次运行时间通常由调度器自动计算。jobstore指定存储此任务的作业存储。通常配置为 ‘default’ 或 DjangoJobStore 的实例且在 add_job 之前使用 add_jobstore 方法配置。executor执行器实例负责实际执行作业。默认使用已配置好的执行器。replace_existing是否替换同名或同ID的任务解决第二次调度任务时因为第一次任务未完成而报错的问题 APScheduler 支持的定时器主要有 定时器说明cron基于 unix_like 系统的 cron 定时任务interval重复定时器date固定时间定时器 scheduler.add_job() 添加定时器时可以在第二个参数以字符串形式指定定时器类型然后使用关键字传参的方式传入具体时间也可以使用apscheduler.triggers.cron.CronTrigger、apscheduler.triggers.interval.IntervalTrigger 或 apscheduler.triggers.date.DateTrigger 创建定时器对象实例传入第二个参数(或用关键字传参传给trigger)。 cron 定时器 interval 定时器 date 定时器 启动任务 在 django 中执行调度器即可开始定时任务网上很多推荐添加到 urls.py 中执行。如果定时器中需要涉及 django 资源例如需要使用 app 的 models 来操作数据库则需要相应资源加载完成。这里推荐写到 app 的 apps.py 中在设置类的 ready() 方法中可以在 app 准备完成时执行。 # app1/apps.py from django.apps import AppConfigclass App1Config(AppConfig):default_auto_field django.db.models.BigAutoFieldname app1def ready(self):super().ready()# 在这里执行 APScheduler 定时任务需要注意的是启动任务前必须完成迁移工作否则 django_apscheduler 会因数据库中没有创建2张表而报错。 另外 django 默认 runserver 时会创建一个守护进程来监控代码有没有改变以计时重启服务这在调试时是非常方便的但是定时任务也会重复执行。所以启用执行任务时需使用 python manage.py runserver --noreload 或添加一个状态量类似于线程锁的作用。 其他 scheduler 对象还有一些常用方法 scheduler.remove_job(job_id) 删除任务scheduler.pause_job(job_id) 暂停任务scheduler.resume_job(job_id) 继续执行暂停任务scheduler.modify_job(job_id) 修改定时任务(可以修改除了id外的属性例如定时器等参数)scheduler.get_jobs() 获取所有定时任务scheduler.get_job(job_id) 获取特定任务scheduler.print_jobs() 打印格式化的任务列表
http://www.pierceye.com/news/87069/

相关文章:

  • app和网站开发的成本网店设计及运营构想
  • 网站建设大量定制阶段管理人员需要培训哪些课程
  • 个人网站网页首页腾讯企业邮箱免费版
  • asp.net网站开发代码wordpress分类首页调用
  • 潮州网站开发多少钱网站开发体会
  • 坑梓网站建设平台wordpress正体中文
  • 营销型网站工程成立公司注册资本需要实缴吗
  • 有没有教如何做衣服的网站东莞市智通人才招聘网
  • 公众号做淘宝客接入手机网站学网站开发有前途吗
  • 集团公司门户网站建设软装素材网站有哪些
  • 十大免费ppt网站在线个人做电影网站
  • 慈城旅游网站建设策划书装修公司加盟 招商加盟
  • 建设个商城网站需要多少钱哪个网站有做兼职的
  • 在哪里可以建网站网络教学平台登录
  • 太原seo建站联雅网站建设
  • DW做旅游网站毕业设计模板什么是定制网站
  • 建设专业网站公司wordpress评论打卡
  • 网站页面设计布局静安企业网站制作
  • 枸杞网站怎么做公司网站用什么开发
  • 规划设计公司网站北京注册公司多少钱
  • 网站项目报价方案网站建设学什么好
  • 自己想做一个网站怎么做考研培训机构排名前十
  • 郑州网站推广服务天津建设集团网站
  • 网络购物网站建设宜昌网站seo
  • 国内使用vue做的网站创意设计网站公司
  • 紫竹桥网站建设阳江网红酒店
  • 做企业网站有前途吗项目建设程序
  • 网站建设与运维预算小程序的下载
  • 全国水利建设市场信用信息平台网站谷歌官网入口
  • 潍坊市住房和城乡建设网站网络营销对传统营销的影响