Python定时任务随机时间执行的实现方法
背景:
有一个爬虫服务,需要定时从公开网站上拉取一些数据,为了避免被识别为爬虫(防爬虫的识别需要根据很多特征,时间仅仅是其中一个维度),需要在指定的时间内,随机生成一个时间爬取
脚本是python写的,直接上代码...
importlogging
importtraceback
fromdatetimeimportdatetime
fromapscheduler.schedulers.backgroundimportBackgroundScheduler
scheduler=BackgroundScheduler()
defspider_schedule():
#spider_schedule是job_id
scheduler.remove_job('spider_schedule')
try:
print'spiderstart...',datetime.now().strftime('%Y-%m-%d%X')
#--------自己的业务代码-------
pass
#---------------------------
print'spiderend...',datetime.now().strftime('%Y-%m-%d%X')
exceptExceptionase:
printtraceback.format_exc(e)
finally:
interval_minutes=random.randint(60,120)#1-120分钟随机选一个时间
interval_seconds=random.randint(1,60)#1~60秒随机选一个时间
scheduler.add_job(spider_schedule,'interval',minutes=interval_minutes,seconds=interval_seconds,id='spider_schedule')
if__name__=='__main__':
scheduler.add_job(spider_schedule,'interval',seconds=10,id='spider_schedule')
scheduler.start()
ps:下面看下python定时执行任务的三种方式
#!/user/bin/envpython
#@Time:2018/6/716:31
#@Author:PGIDYSQ
#@File:PerformTaskTimer.py
#定时执行任务命令
#1.定时任务代码
importtime,os,sched
#schedule=sched.scheduler(time.time,time.sleep)
#defperform_command(cmd,inc):
#os.system(cmd)
#print('task')
#deftimming_exe(cmd,inc=60):
#schedule.enter(inc,0,perform_command,(cmd,inc))
#schedule.run()
#print('showtimeafter2seconds:')
#timming_exe('echo%time%',2)
#2.周期性执行任务
schedule=sched.scheduler(time.time,time.sleep)
defperform_command(cmd,inc):
#在inc秒后再次运行自己,即周期运行
schedule.enter(inc,0,perform_command,(cmd,inc))
os.system(cmd)
deftimming_exe(cmd,inc=60):
schedule.enter(inc,0,perform_command,(cmd,inc))
schedule.run()#持续运行,直到计划时间队列变成空为止
print('showtimeafter2seconds:')
timming_exe('echo%time%',2)
#3.循环执行命令
#importtime,os
#defre_exe(cmd,inc=60):
#whileTrue:
#os.system(cmd)
#time.sleep(inc)
#re_exe("echo%time%",5)