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之??碌某?? target=
Sep 12 Python
跟老齐学Python之永远强大的函数
Sep 14 Python
Django中的Model操作表的实现
Jul 24 Python
在Python中定义一个常量的方法
Nov 10 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
python获取对象信息的实例详解
Jul 07 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
前端性能优化建议
2020/09/17 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
简述Python中的面向对象编程的概念
2015/04/27 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
优秀应届毕业生自荐信
2013/11/16 职场文书
采购部长岗位职责
2014/06/13 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
详解Python类和对象内容
2021/06/22 Python
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
用JS创建一个录屏功能
2021/11/11 Javascript