Python定时任务随机时间执行的实现方法

背景:

有一个爬虫服务,需要定时从公开网站上拉取一些数据,为了避免被识别为爬虫(防爬虫的识别需要根据很多特征,时间仅仅是其中一个维度),需要在指定的时间内,随机生成一个时间爬取

脚本是python写的,直接上代码...

import logging

import traceback

from datetime import datetime

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def spider_schedule():

# spider_schedule是job_id

scheduler.remove_job('spider_schedule')

try:

print 'spider start... ', datetime.now().strftime('%Y-%m-%d %X')

#--------自己的业务代码-------

pass

#---------------------------

print 'spider end... ', datetime.now().strftime('%Y-%m-%d %X')

except Exception as e:

print traceback.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/env python

# @Time :2018/6/7 16:31

# @Author :PGIDYSQ

#@File :PerformTaskTimer.py

#定时执行任务命令

#1.定时任务代码

import time,os,sched

# schedule = sched.scheduler(time.time,time.sleep)

# def perform_command(cmd,inc):

# os.system(cmd)

# print('task')

# def timming_exe(cmd,inc=60):

# schedule.enter(inc,0,perform_command,(cmd,inc))

# schedule.run()

# print('show time after 2 seconds:')

# timming_exe('echo %time%',2)

#2.周期性执行任务

schedule = sched.scheduler(time.time,time.sleep)

def perform_command(cmd,inc):

#在inc秒后再次运行自己,即周期运行

schedule.enter(inc, 0, perform_command, (cmd, inc))

os.system(cmd)

def timming_exe(cmd,inc=60):

schedule.enter(inc,0,perform_command,(cmd,inc))

schedule.run()#持续运行,直到计划时间队列变成空为止

print('show time after 2 seconds:')

timming_exe('echo %time%',2)

#3.循环执行命令

# import time,os

# def re_exe(cmd,inc = 60):

# while True:

# os.system(cmd)

# time.sleep(inc)

# re_exe("echo %time%",5)

以上是 Python定时任务随机时间执行的实现方法 的全部内容, 来源链接: utcz.com/z/318413.html

回到顶部