本文目录一览:
- 1、python动态添加删除定时任务
- 2、简单强大的Python库!Schedule—实用的周期任务调度工具
- 3、如何在Windows系统中设置Python程序定时运行
- 4、如何使用Python让某段程序固定在每天早上八点钟开始运行
- 5、如何用Python写一个每天的定时程序
python动态添加删除定时任务
可以基于tornado-APScheduler实现添加动态添加/删除/暂停/清除定时任务。
安装:pip3 install apsheduler
1.任何调度器在开始后,不能再次start。不然会出现异常
2.shutdown方法:终结掉对应的调度器,所以代码逻辑里需要检测一下. running方法可以判断调度器的运行状态,如果需要设计delete方法清除某个任务,建议用remove方法,对应代码逻辑需要注意start()不要重复
3.注意BlockingScheduler,如果你想动态添加任务的话,这个调度器是阻塞的,所以每个任务必须是一个守护线程,个人感觉不太方便,建议用其他非阻塞的
4. get_jobs()方法很有用,如果我们加上dir,配合这个方法可以很灵活地配置
5.修改一个周期任务,需要用modify_job方法,根据你的job_id修改
Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
简单强大的Python库!Schedule—实用的周期任务调度工具
如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点:
1.不方便执行 秒级的任务 。
2.当需要执行的定时任务有上百个的时候,Crontab的 管理就会特别不方便 。
另外一个选择是 Celery,但是 Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,Celery 不会是一个好选择。
在你想要使用一个轻量级的任务调度工具,而且希望它尽量简单、容易使用、不需要外部依赖,最好能够容纳 Crontab 的所有基本功能,那么 Schedule 模块是你的不二之选。
使用它来调度任务可能只需要几行代码,感受一下:
上面的代码表示每10分钟执行一次 job 函数,非常简单方便。你只需要引入 schedule 模块,通过调用 scedule.every(时间数).时间类型.do(job) 发布周期任务。
发布后的周期任务需要用 run_pending 函数来检测是否执行,因此需要一个 While 循环不断地轮询这个函数。
下面具体讲讲Schedule模块的安装和初级、进阶使用方法。
1.准备
请选择以下任一种方式输入命令安装依赖 :
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
2.基本使用
最基本的使用在文首已经提到过,下面给大家展示更多的调度任务例子:
可以看到,从月到秒的配置,上面的例子都覆盖到了。不过 如果你想只运行一次任务 的话,可以这么配:
参数传递
如果你有参数需要传递给作业去执行,你只需要这么做:
获取目前所有的作业
如果你想获取目前所有的作业:
取消所有作业
如果某些机制触发了,你需要立即清除当前程序的所有作业:
标签功能
在设置作业的时候,为了后续方便管理作业,你可以给作业打个标签,这样你可以通过标签过滤获取作业或取消作业。
设定作业截止时间
如果你需要让某个作业到某个时间截止,你可以通过这个方法:
截止日期之后,该作业将无法运行。
立即运行所有作业,而不管其安排如何
如果某个机制触发了,你需要立即运行所有作业,可以调用 schedule.run_all :
3.高级使用
装饰器安排作业
如果你觉得设定作业这种形式太啰嗦了,也可以使用装饰器模式:
并行执行
默认情况下,Schedule 按顺序执行所有作业。其背后的原因是,很难找到让每个人都高兴的并行执行模型。
不过你可以通过多线程的形式来运行每个作业以解决此限制:
日志记录
Schedule 模块同时也支持 logging 日志记录,这么使用:
效果如下:
异常处理
Schedule 不会自动捕捉异常,它遇到异常会直接抛出,这会导致一个严重的问题: 后续所有的作业都会被中断执行 ,因此我们需要捕捉到这些异常。
你可以手动捕捉,但是某些你预料不到的情况需要程序进行自动捕获,加一个装饰器就能做到了:
这样, bad_task 在执行时遇到的任何错误,都会被 catch_exceptions 捕获,这点在保证调度任务正常运转的时候非常关键。
如何在Windows系统中设置Python程序定时运行
经典的启动“启动”文件夹,单击“开始→程序”,“启动”菜单,这就是最经典的Windows启动位置,放在这合理的程序和快捷方式都会在系统启动时自动运行。智能的启动——开/关机/登录/注销脚本:
在Windows中,单击“开始→运行”,输入gpedit.msc回车可以打开“组策略编辑器”,在左侧窗格展开“本地计算机策略→ 用户配置→管理模板→系统→登录”,然后在右窗格中双击“在用户登录时运行这些程序”,单击“显示”按钮,在“登录时运行的项目”下就可以添加自启动的程序。
定时的启动——任务计划:
在默认情况下,“任务计划”程序随Windows一起启动并在后台运行。如果把某个程序添加到计划任务文件夹,并将计划任务设置为“系统启动时”或 “登录时”,这样也可以实现程序自启动。通过“计划任务”加载的程序一般会在任务栏系统托盘区里有它们的图标。可以双击“控制面板”中的“计划任务”图标查看其中的项目。
注册表启动项:注册表是启动程序最多的地方,主要有以下几项:
1.Run键
Run键是病毒最青睐的自启动之所,该键位置是[HKEY_CURRENT_
USER\Software\Microsoft\Windows\CurrentVersion\Run]和[HKEY_
LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run],其下的所有程序在每次启动登录时都会按顺序自动执行。
还有一个不被注意的Run键,位于注册表[HKEY_CURRENT_
USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]和 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Policies\Explorer\Run]。
2.RunOnce键
RunOnce位于[HKEY_CURRENT_USER\Software\Microsoft\Windows\
CurrentVersion\RunOnce]和[HKEY_LOCAL_MACHINE\Software\Microsoft\
Windows\CurrentVersion\RunOnce]键,与Run不同的是,RunOnce下的程序仅会被自动执行一次。
3.RunServicesOnce键
RunServicesOnce键位于[HKEY_CURRENT_USER\Software\Microsoft\
Windows\CurrentVersion\RunServicesOnce]和[HKEY_LOCAL_MACHINE\
Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]下,其中的程序会在系统加载时自动启动执行一次。
如何使用Python让某段程序固定在每天早上八点钟开始运行
你在windows下根本不用这么麻烦:
首先,比如你的程序名字是 test.py
如果你想调用某个具体函数,就自己写一个的文件,比如
import spider
spider.go()
然后,用系统at命令指定几点几分或者每个星期几或者每个月的第几个星期几等执行某个程序。在执行程序的地方写到:
c:\python25\python.exe myfile.py
这样就可以了。
===================================
如果你觉得简单的方法不好或者你要在其它系统下也可以用,那就这样:
首先,写一串代码:大致意思如下,把_换成空格
import os,time,spider
while True:
__time.sleep(1)
__if time.ctime()[12:19]=="8:00:00" or time.ctime()[12:19]=="20:00:00" :
____spider.go() #举个例子
然后,开机就执行这个文件。windows下可以把文件存为pyw然后开机启动这样没有黑框。其它系统你爱怎么样都可以了(mac没用过不知道)
如何用Python写一个每天的定时程序
a.我们先获取当前的时间
now=datetime.datetime.now()
假设当前时间是2017-02-09 20:19:47.555000
b.然后我们输入一个你要定时执行的target时间
比如你是x分10秒的时候执行sched_Timer=datetime.datetime(x,x,x,x,x,10)
前面的x是并不重要(只要最后是10秒就行了),我们就把目标时间设的比当前晚一点即可:
sched_Timer=datetime.datetime(2017,2,9,20,20,10)
c.好当时间到了20:20:10的时候要运行我们的程序
如何定时到了呢,很简单用
if now==sched_Timer:
'run Task'
d.那么如何让时间在下一分钟10秒继续执行呢,也很简单用timedelta()
datetime.timedelta(minutes=1)把target时间往后增加一分钟
sched_Timer=sched_Timer+datetime.timedelta(minutes=1)
然后外边用个while 死循环hold住就可以了