Python多线程怎样优雅的响应中断异常
时间:2022-04-21
本文章向大家介绍Python多线程怎样优雅的响应中断异常,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近需求做完没什么事干,就爬了点知乎的话题数据,用到了多个线程。遇到一个问题:
当我们手动时,怎样把子线程都停掉呢?
先说几个知识点:
Ctrl+C 引起的任意线程都能收到。但是当系统存在模块时,中断只会发到主线程。
锁的操作不会被中断,在获得锁之后才会抛出异常。
主线程因异常退出后,一般情况下,剩下所有的子线程也会被系统杀掉,并且不会执行完整的操作。
一般的系统都是有signal模块的,所以键盘中断异常一般只能由主线程处理。
下面我们开10个线程模拟爬去数据,在主线程捕获该异常:
运行后,按下,发现控制台打印了之后,其他的10个子线程并没有停止而是继续在运行。
第三条不是说主线程退出后所有的子线程会被系统杀掉吗?
答案是主线程在捕获中断、执行完打印操作后并没有退出,而是在等待子线程退出,更改方法:
重新运行,按下,会发现打印出激活状态的线程数是11,也就验证了主线程并没有退出,所以子线程会继续运行下去。
那怎样停止所有的子线程呢?
引入模块的类:
代码中引入了一个类型哨兵对象,这个对象的、和方法都是线程安全的。
在线程的循环体中我们不断的判断该对象是否被设置过,如果没有则马上退出
在主线程捕获到中断异常时将该对象清空
这样程序运行起来后,当按下时,主线程和子线程都会马上停止下来。
知乎话题数据
开头说到的爬虫,我是反编译了知乎的app和手机抓包找到了一些客户端话题相关的api,然后花了一天的时间把知乎所有的话题数据撸了下来。统计下来知乎目前共计有44618个话题,其中有5000+个”未归类”话题。
关注用户最多的10个话题:
问题最多的10个话题:
接下来准备根据这些话题把所有用户信息都给撸一遍,没有代理真是个硬伤,爬得太快分分钟被封ip、封账号,各位又好用的代理推荐下啊~~~
EOF
- 微信小程序再次深夜放大招!竟然可以玩起直播来了?
- 上海设专项资金支持人工智能创新发展
- 监管下发145号文摸底互联网平台与交易所合作
- 条码支付确立规范引导金融创新趋利避害
- 百度Apollo自动驾驶组“国家队”,全线产品将在CES首度亮相
- Sass 基础(三)
- 2018年——霍金怎么样谈未来人工智能,地球还有多少时间
- Linux探秘之用户态与内核态
- 微信小游戏重磅上线,H5游戏和页游迎来新天地?
- 名为“闪电比特币”Lightning Bitcoin,LBTC的新型比特币硬叉被释放
- IDHub亮相区块链行业巅峰盛宴 分享网络生活的“进化论”
- 总结:如何加速你的 WordPress 站点?
- 百年老牌的创新之路:看可口可乐如何用AI、大数据颠覆传统营销
- 微信小游戏上线,小程序或将成为未来的营销工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法