记得以前Windows任务调度是可以正常使用的。今天试了一下,发现不能正常使用,任务计划老是挂。接下来记录几个Python爬虫定时任务的解决方案。1.方法一,whileTrue最先最容易挂whiletrue无限循环,废话不多说,直接上代码:importosimporttimeimportsysfromdatetimeimportdatetime,timedeltadefOne_Plan():#设置启动周期second_update_time=24*60*60#当前时间now_Time=日期时间。now()#设置任务开始时间plan_Time=now_Time.replace(hour=9,minute=0,second=0,microsecond=0)#设置差值,-1day,21:48:53.246576,类似这个#time.sleep()需要传入int,所以下面使用了.total_seconds()#主要用来计算差值,返回int,具体函数可以自己查相关资料delta=plan_Time-now_Timefirst_plan_Time=delta.total_seconds()%second_update_timeprint("distancesecondOneexecutionneedstosleepfor%dseconds"%first_plan_Time)returnfirst_plan_Time#whileTure代码块,暂停程序,调用函数名在sleep时间结束后执行whileTrue:s1=One_Plan()time。sleep(s1)#这里是自定义的如果要运行代码可以替换成hellowworld函数或者注释掉这行测试exe_file(D_list)print("Executingthefirstupdateprogram").个人感觉用这种方式启动定时计划是一个单一的程序,每天执行一次是可以的。如果要考虑一天执行多个任务,需要一天执行多次,短板会一下子凸显出来。工作情况需要考虑的因素很多。比如爬虫程序需要在中午12:00、早上6:00、上午9:00、下午3:00执行四次,需要同时执行四个爬虫。还要考虑网络是否稳定。,程序挂了怎么办等等。2、方法二、Timer模块前面提到了最简单的定时启动。可以说是最简单粗暴的了。人生苦短,蟒蛇优雅。有没有简单的几行代码就可以搞定的?必须有哈!让我举个例子。在上一个方法的最后,提到了需要考虑其他因素。这里是:现在需要启动一个selenium爬虫,使用Firefox驱动+多线程,大家明白了,现在电脑管家显示CPU使用率为20%。启动selenium后,不断开启浏览器+多线程。嗯,不到5分钟,CPU使用率直接被拉到90%+,电脑卡死了。计时程序虽然还在运行,但是已经处于待机状态。是不是突然觉得电脑卡住了,第一反应就是:卧槽,这lj电脑,程序怎么跑都跑不了,还写那么多代码,*****!!对了,接下来是代码,具体功能可以参考相关资料进一步学习:fromdatetimeimportdatetimefromthreadingimportTimerimporttime#Timedtaskdeftask():print(datetime.now().strftime("%Y-%m-%d%H:%M:%S"))deftimedTask():'''第一个参数:延迟执行任务的时间(秒)第二个参数:要执行的函数第三个参数:调用函数的参数(tuple)'''Timer(5,task,()).start()whileTrue:timedTask()time.sleep(5)7行代码,是不是很优雅?优雅的主要优点是代码少,所以不需要太多努力,对吧?2020-06-0514:06:392020-06-0514:06:442020-06-0514:06:492020-06-0514:06:542020-06-0514:06:592020-06-0514:07:042020-06-0514:07:092020-06-0514:07:142020-06-0514:07:192020-06-0514:07:243。方法三、本次直接上传sched模块——sched模块代码如下:fromdatetimeimportdatetimeimportschedimporttimedeftimedTask():#初始化sched模块的调度器类,传入(time.time,time.sleep)这两个参数schedscheduler=sched.scheduler(time.time,time.sleep)#增加调度任务,输入(休眠时间,执行级别,执行函数)scheduler.enter(5,1,task)#运行任务scheduler.run()#定时任务deftask():print(datetime.now().strftime("%Y-%m-%d%H:%M:%S"))if__name__=='__main__':timedTask()这个模块也很容易使用。需要注意的是,scheduler()只会执行一次,然后结束程序。你可以添加whileTure也可以直接在timeTask中添加调度任务。除了这种写法,还有一种写法。上面的代码:importscheduleimporttimedefhellow():print('hellow')defTimer():schedule.every().day.at("09:00").do(hellow)schedule.every().day.at("18:00").do(hellow)whileTrue:schedule.run_pending()time.sleep('periodthatrequiressleep')Timer()这里可以看到,有day-hour-minute,定时任务很方便,添加whileTrue添加需要休眠的时间,在函数模块中添加执行次数即可
