美文网首页菜鸟学PythonPython办公效率
如何用Python写一个每分每时每天的定时程序

如何用Python写一个每分每时每天的定时程序

作者: 菜鸟学python | 来源:发表于2017-02-10 11:35 被阅读23224次

阅读本文大概需要4分钟

上一篇我们学习了Python关于时间,日期,日历的一些基本用法,现在我们通过两个精选例子让你融汇贯通,快来看看吧

1.计算生日是星期几

当你女朋友要过生日了,你肯定要定找家饭店订个餐庆祝一下,餐馆工作日会空一些,周末位置不好定,要是能知道她的生日是星期几就好了,下面这个程序就能搞定~~

比如girl friend 的生日假设是 gf_birthday='2017-3-3'

1).我们先把变量格式化成一个datetime对象

birthday=datetime.datetime.strptime(gf_birthday,'%Y-%m-%d')

2).然后利用datetime里面的函数weekday来得到一个下标

birthday.weekday()

3).构造一个weekdays的列表,根据下标从列表里面取出是周几

weekdays=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

weekdays[birthday.weekday()]

当然你要计算比如情人节,圣诞节什么的都可以用上面的程序,或者整个列表把10年的节日都罗列计算一下都是可以了,是不是很简单,对日期的理解有木有加深了一下下

2.定时任务

在Python里面,比如你想定期去爬一个网页,或者做运维的同学想每天12点去定时download一个文件,或者定时去扫描一些服务器,甚至老板的需求不停的变可能是,每隔5分钟,或者每小时的整点10分,每周每月都有一些定时任务

用Python怎么破很简单,下面这个程序轻松搞定

我们先从一个最简单的例子说,假设我们是每分种的第10秒,去执行一个任务去打印一下当前的目录

1).window下是dir命令,linux是ls

我们用platform这个模块来判断一下操作系统

import platform

os_platfrom=platform.platform()

if os_platfrom.startswith('Darwin'):

print'this is mac os system'

os.system('ls')

elif os_platfrom.startswith('Window'):

print'this is win system'

os.system('dir')

2).如何定时执行

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住就可以了

同样的这个代码也可以扩展,把minutes=1改成hours=1就变成了每个小时定时任务,改成days=1就变成每天的定时任务

大家可以直接动手练习一下,如果需要源码的同学请后台跟我联系,留言

相关文章

  • 如何用Python写一个每分每时每天的定时程序

    阅读本文大概需要4分钟 上一篇我们学习了Python关于时间,日期,日历的一些基本用法,现在我们通过两个精选例子让...

  • Something For Practice

    Python Python 练习册,每天一个小程序 Github标星57k+,如何用Python实现所有算法! -...

  • Linux定时任务之crontab(待续)

    标签: crontab 定时任务 Linux 一、需求 写了一个Python小程序,需要在Linux每天定时执行。...

  • 每天每时每刻每分每秒

    那一秒,流星划成一个弧度,我向未来合十,许下最美的愿望,遇见最美的你。 那一分,我在思考,思考怎么把诗歌描绘成你的...

  • |是梦:

    每天每时每分每秒,我都怀着感恩,每天每时每分每秒,我都想感谢你。我得以,以活着的形态,因为有你,我得以,以活着活下...

  • 爱在每时每分

    不知从哪一年开始,兴起了在5月20日表白、把这天当情人节过。几年前,公司里的一位日本老爷爷问起5月20日是什么日子...

  • python:使用schedule模块定时执行任务

    python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定...

  • 感恩生命的每时每分

    生命没有回头路,每走一步都算数。 感谢五一长假,给了自己一段反思内心的时光。现在的我,正处在一段低谷期。工作岗位并...

  • 铁匠:邓松云

    《铁匠》:邓松云 80年代,年少如牛的你拜老师傅打铁 你打铁时,铁也在打你 每天、每时、每分、每秒都在搏击 你恪守...

  • 每时每分每秒都美妙

    早在数千年前,纯天然精油已经为维护健康提供了简单的解决方案。精油,是从植物的种子、树皮、茎、根、花以及其他部位所发...

网友评论

  • 5c39c691b65a:你好。。我昨晚也在尝试使用这个库。
    遇到疑问,
    假设 我要 每分钟的42秒执行 里面的job,
    再假设,我要 每个十分钟里的7分42秒执行一次 job呢?
    即7分42秒,17分42秒,27分42秒,37分42秒,47分42秒,57分42秒,如此循环下去
    看要求应该是每十分钟的7分42秒执行job,
    若代码运行的时间是,6分10秒,程序如何在7分42秒执行一次job,然后每十分钟的7分42秒执行job

    请前辈指点。谢谢
    5c39c691b65a:@菜鸟学python 加个时间列表 判断可否?
    比如
    ['7:42','17:42','27:42','37:42','47:42','57:42'],然后和 datetime.datetime.now().strftime('%M:%S') 做判断,相同就执行,
    5c39c691b65a:@菜鸟学python 恩 更具体些 是 每十分钟的7分42秒 执行job
    菜鸟学python:加timedetale 10分钟?
  • 已墨:原来的代码现在时间与设置时间不一样无法执行。把当前时间和设置时间做下格式转换
    如下:

    import datetime

    def timerFun(sched_Timer):
    flag=0
    while True:
    now=datetime.datetime.now()
    now=now.strftime('%Y-%m-%d %H:%M:%S')
    now=datetime.datetime.strptime(now,'%Y-%m-%d %H:%M:%S')
    sched=datetime.datetime.strptime(str(sched_Timer),'%Y-%m-%d %H:%M:%S')
    if (now==sched):
    run_Task()
    flag=1
    else:
    if flag==1:
    sched_Timer=sched_Timer+datetime.timedelta(minutes=1) #下一分钟10秒继续执行把minutes=1改成hours=1就变成每小时定时
    flag=0
  • f6d9763b773f:import os
    import time

    def run_Task():
    # os.system('python every_hour_task.py')
    print("ceshi")

    def timerFun (sched_Timer):
    flag = 0
    while True:
    now = time.localtime()
    # 每小时执行一次,即当分钟相等时执行
    if now.tm_min == sched_Timer.tm_min:
    run_Task()
    # 为避免一分钟执行多次,休眠一分钟
    time.sleep(60)

    if __name__ == '__main__':
    sched_Timer = time.strptime("2017-11-16 19:40:00","%Y-%m-%d %H:%M:%S")
    print("run the timer task at {0}", time.strftime("%Y-%m-%d %H:%M:%S", sched_Timer))
    timerFun(sched_Timer)
  • LXChild:if now==sched_Timer:
    这块有点问题,会出现重复运行的情况,可以改成这样
    if (now == self.schedule_timer) & (flag == 0):
    菜鸟学python:@LXChild 不错:+1:
  • 803284b34c18:不错不错,收藏了。

    推荐下,分布式作业中间件 Elastic-Job 源码解析 16 篇:http://t.cn/R05mBNd


    12a033ef755a:写的不错,谢谢博主;已收藏~
  • 丹天:好啊,跟着学习
  • 6880046a39d2:import datetime,time
    #设定开始时间start_time
    sched_time = datetime.datetime(2017, 8, 19, 10, 53, 00)
    #间隔时间
    timedelta=datetime.timedelta(minutes=1)
    #取当下时间
    now = datetime.datetime.now()
    #判断是否开始时间已错过,如果结果为负数,则提示错误
    if str(sched_time-now)[0]=='-':
    print ('开始时间已经错过,请重新调整开始时间')
    else:
    while True:
    now = str(datetime.datetime.now())[:-7]
    if now==str(sched_time):
    print (sched_time)
    sched_time=str(datetime.datetime.now()+timedelta)[:-7]
    print (sched_time)
    print ('请在这里开始你的程序')
    time.sleep(1)
    print (now)
    菜鸟学python:@我应该叫个什么名字呢 py2.7
    _日记一事_:@6880046a39d2 您这个是不是用的python3版本啊
    6880046a39d2:贴上来格式都没有啦
    我贴个github网址试试
    https://github.com/wjb711/Opencv_learning/tree/master/%E5%AE%9A%E6%97%B6%E5%99%A8
  • d5ae0509c267:按楼主提供的方法尝试了下,楼主提供的一种定时思路是可行的,不过在具体执行过程中“if now==sched_Timer:”这里可能会有点问题。

    在while循环中,datetime.datetime.now()获取的时间是“2017-8-10 17:22:54.123456”这种格式的,而楼主设置的时间格式 print 出来默认是“2017-8-10 17:22:54”,可能是程序运行时间的因素,实际运行过程中判定二者相等,进而执行if内的语句的情况很少出现(我这里尝试了半个下午,没有一次判定二者相等)。

    下面是我自己稍作修改后自行使用的:
    import time

    sched_time = datetime.datetime(2017, 8, 10, 17, 31, 0)
    loopflag = 0
    while True:
    now = datetime.datetime.now()
    if sched_time<now<(sched_time+datetime.timedelta(seconds=1)):
    loopflag = 1
    time.sleep(1)
    if loopflag == 1:
    func() #此处为你自己想定时执行的功能函数
    loopflag = 0
    菜鸟学python:@宁静的海_coder 厉害
    83291453590e:经测试,loopflag可以不用。
    time.sleep(1)
    print(now)
    flag = 1
    菜鸟学python:@最爱菠萝味 厉害学习了
  • 63f1f369e35c:您好。请问可以问您要一下这个定时任务的源代码吗?:smile:
    菜鸟学python:@mini小小鹿 可以啊 没有问题啊 你关注微信公众号:“菜鸟学python”,后台留言一下 就可以获得源码
    菜鸟学python:关注公众号 大量源码
  • shelly7:请问apscheduler怎么弄
  • 无情boss:加油。虽然我不懂程序,不过我还是要顶你。
    菜鸟学python:@唐纳德_特朗普 多谢多谢,感动的一塌糊涂

本文标题:如何用Python写一个每分每时每天的定时程序

本文链接:https://www.haomeiwen.com/subject/gvdgittx.html