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


Posted in Python onAugust 14, 2019

背景:

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

脚本是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 相关文章推荐
Python学习笔记_数据排序方法
May 22 Python
Python中字典的setdefault()方法教程
Feb 07 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Python字符串格式化的方法(两种)
Sep 19 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
python重试装饰器的简单实现方法
Jan 31 Python
python3实现绘制二维点图
Dec 04 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
查看Python依赖包及其版本号信息的方法
Aug 13 #Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 #Python
Python编写带选项的命令行程序方法
Aug 13 #Python
使用python模拟命令行终端的示例
Aug 13 #Python
在macOS上搭建python环境的实现方法
Aug 13 #Python
解决Mac下使用python的坑
Aug 13 #Python
python 接口实现 供第三方调用的例子
Aug 13 #Python
You might like
使用php4加速网络传输
2006/10/09 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
Django REST framework视图的用法
2019/01/16 Python
python Tkinter版学生管理系统
2019/02/20 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Python实现数值积分方式
2019/11/20 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
优秀教师演讲稿
2014/05/06 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
高中地理教学反思
2016/02/19 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis