python循环定时中断执行某一段程序的实例


Posted in Python onJune 29, 2019

问题说明

最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号

所以就在想,有没有像单片机那样子设置一个定时中断,再定义一个中断入口,这样子每隔一段时间执行一次中断

当然不能用sleep,这样子整个进程就停在这了,而不是接着爬数据

解决方法

用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,python实例代码如下

import threading
import time
def change_user():
  print('这是中断,切换账号')
  t = threading.Timer(3, change_user)
  t.start()
#每过3秒切换一次账号
t = threading.Timer(3, change_user)
t.start()
while True:
  print('我在爬数据')
  time.sleep(1)

输出就像这样子:

我在爬数据
我在爬数据
我在爬数据
这是中断,切换账号
我在爬数据
我在爬数据
我在爬数据
这是中断,切换账号
我在爬数据

现在问题就解决啦!

再想想单独对于这个例子来说也是可以用sleep的,代码如下

import threading
import time
def change_user():
  while True:
    print('这是中断,切换账号')
    time.sleep(3)
def spider():
  while True:
    print('我在爬数据')
    time.sleep(1)
t1 = threading.Thread(target=change_user)
t2 = threading.Thread(target=spider)
t2.start()
t1.start()
t2.join()
t1.join()

因为两个线程再执行sleep的时候会释放GIL锁,被另一线程抢到GIL锁,也可以实现定时切换账号,不过这个对于实际应用可以不太方便,所以推荐使用第一种方法

以上这篇python循环定时中断执行某一段程序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解使用Python处理文件目录的相关方法
Oct 16 Python
python 容器总结整理
Apr 04 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
Python print不能立即打印的解决方式
Feb 19 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
Python字典fromkeys()方法使用代码实例
Jul 20 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
python顺序执行多个py文件的方法
Jun 29 #Python
如何使用python把ppt转换成pdf
Jun 29 #Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 #Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 #Python
python全栈要学什么 python全栈学习路线
Jun 28 #Python
使用python 写一个静态服务(实战)
Jun 28 #Python
python适合人工智能的理由和优势
Jun 28 #Python
You might like
php 输出双引号"与单引号'的方法
2010/05/09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jquery实现加载等待效果示例
2013/09/25 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python中的文件和目录操作实现代码
2011/03/13 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python闭包函数定义与用法分析
2018/07/20 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
《菜园里》教学反思
2014/04/17 职场文书
个人合作协议范本
2015/08/06 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
创业计划书之酒厂
2019/10/14 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫