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实现的金山快盘的签到程序
Jan 17 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
python opencv实现信用卡的数字识别
Jan 12 Python
python微信公众号开发简单流程实现
Mar 09 Python
Pygame Rect区域位置的使用(图文)
Nov 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
php上传图片生成缩略图(GD库)
2016/01/06 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
Bootstrap精简教程
2015/11/27 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
Python找出list中最常出现元素的方法
2016/06/14 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python实现查找所有程序的安装信息
2020/02/18 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
采购主管工作职责
2013/12/12 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
银行委托书范本
2014/04/04 职场文书
租房协议书
2014/04/10 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
医院志愿者活动总结
2015/05/06 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
对Keras自带Loss Function的深入研究
2021/05/25 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS