python线程监控配置文件_一日一技:Python多线程的事件监控
一日一技:Python多线程的事件监控
设想这样一个场景:
你创建了10个子线程,每个子线程分别爬一个网站,一开始所有子线程都是阻塞等待。一旦某个事件发生:例如有人在网页上点了一个按钮,或者某人在命令行输入了一个命令,10个爬虫同时开始工作。
肯定有人会想到用Redis来实现这个开关:所有子线程全部监控Redis中名为start_crawl的字符串,如果这个字符串不存在,或者为0,那么就等待1秒钟,再继续检查。如果这个字符串为1,那么就开始运行。
代码片段可以简写为:
import time
import redis
client = redis.Redis()
while client.get('start_crawl') != 1:
print('继续等待')
time.sleep(1)
这样做确实可以达到目的,不过每一个子线程都会频繁检查Redis。
实际上,在Python的多线程中,有一个 Event模块,天然就是用来实现这个目的的。
Event是一个能在多线程中共用的对象,一开始它包含一个为 False的信号标志,一旦在任一一个线程里面把这个标记改为 True,那么所有的线程都会看到这个标记变成了 True。
我们通过一段代码来说明它的使用方法:
import threading
import time
class spider(threading.Thread):
def __init__(self, n, event):
super().__init__()
self.n = n
self.event = event
def run(self):
print(f'第{self.n}号爬虫已就位!')
self.event.wait()
print(f'信号标记变为True!!第{self.n}号爬虫开始运行')
eve = threading.Event()
for num in range(10):
crawler = spider(num, eve)
crawler.start()
input('按下回车键,启动所有爬虫!')
eve.set()
time.sleep(10)
运行效果如下图所示:
在这段代码中,线程 spider在运行以后,会运行到 self.event.wait()这一行,然后10个子线程会全部阻塞在这里。而这里的 self.event,就是主线程中 eve=threading.Event()生成的对象传入进去的。
在主线程里面,当执行了 eve.set()后,所有子线程的阻塞会被同时解除,于是子线程就可以继续运行了。
kingname
攒钱给产品经理买房。
python线程监控配置文件_一日一技:Python多线程的事件监控相关推荐
- python延时执行函数_一日一技:在 Python 中实现延迟调用
一日一技:在 Python 中实现延迟调用 收录于话题 #你不知道的 Python 71个 摄影:产品经理 产品经理的生日餐 熟悉 Golang 的同学都知道,Golang 里面有一个关键词叫做def ...
- python中timeit函数_一日一技:Python中的timeit方法
timeit()方法 python中的timeit()方法, 它用于获取代码的执行时间.该库将代码语句运行一百万次,并提供从集合中花费的最短时间.这是一种有用的方法,有助于检查代码的性能. 语法如下: ...
- python 线程安全链表_教你用 Python 实现 HashMap 数据结构
<犬夜叉·镜中的梦幻城> 今天这篇文章给大家讲讲hashmap,这个号称是所有Java工程师都会的数据结构.为什么说是所有Java工程师都会呢,因为很简单,他们不会这个找不到工作.几乎所有 ...
- python线程延时函数_延迟队列的python实现
方案思路 1.利用优先级队列实现 2.利用redis的zset实现 3.利用rabbitmq超时TTL后的死信机制实现 4.通过threading.Timer()使用多线程解决需求.注:这不是延迟队列 ...
- python中不被定义_一日一技:在Python中双下划线私有方法不能被调用的原理
一日一技:在Python中双下划线私有方法不能被调用的原理 在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info: ...
- python归并排序理解不了_一日一技:如何更好地理解归并排序?
一日一技:如何更好地理解归并排序? 摄影:产品经理 厨师:kingname 请确保你已经看了我昨天的公众号文章.昨天的内容是今天的基础. 一日一技:在 Python 里面如何合并多个有序列表并使得结果 ...
- python模型预测结果 取整_一日一技:Python里面的//并不是做了除法以后取整
一日一技:Python里面的//并不是做了除法以后取整 在Python 3里面,我们做除法的时候会遇到 a/b 和 a//b两种写法: >>> 10 / 3 3.3333333333 ...
- 一日一技python安装_一日一技:快速实现Python 命令行参数
一日一技:快速实现Python 命令行参数 摄影:产品经理 厨师:kingname 我们有时候需要使用 Python 开发一些命令行工具,并在运行命令的时候指定一些参数,例如: python3 xxx ...
- python文本格式上一日_一日一技:在 Python 中快速遍历文件
一日一技:在 Python 中快速遍历文件 摄影:产品经理 厨师:产品经理 当我们要在一个文件夹及其子文件夹里面寻找特定类型的文件,我们可能会这样写代码: 没有子文件夹时 import os all_ ...
最新文章
- 维特比算法—打字输入预测
- mysql 学习笔记05 统计函数的相关使用
- QuickSort 优化后的快速排序算法
- 给DataList分页有两个办法:1、自定义实现分页方法 2、用第三方控件(例如AspNetPager)
- 挂了三次科目二的我,竟被一台智能车征服 | 威马W6停车挑战
- C++_函数_函数的占位参数_函数重载---C++语言工作笔记034
- PDF文件的加载及展示
- java性能优化文章
- php二维数组按照键值排序的方法
- Win7无法正常使用TTS语音的解决办法
- CSS RESET —— 浏览器样式重置
- 小米路由器3潘多拉固件刷机教程
- 衣带渐宽终不悔,为“指针”消得人憔悴(三)
- 【毕业设计】大数据疫情数据分析及可视化系统 - python
- 微信小程序实现商品列表跳转详情页
- 操作系统基本原理---设备管理
- UDP攻击是什么意思?UDP攻击防范措施
- c语言随机抽取扑克问题,关于扑克牌的问题
- Python参数校验工具:validate.py
- 锂离子电池析锂原因总结
热门文章
- Python中的高级数据结构详解
- python基础对list的增删查改和列表的排序
- 排序算法的python实现
- Linux ubuntu16.04 安装opencv4教程(源码编译)
- win10如何关闭文件夹或者照片的最近浏览?
- yunyang1994 tensorflow_yolov3 ./checkpoint/yolo3_coco_demo.ckpt does not exist !!! Now it starts to
- 网络监听listen技术是什么原理?
- pycharm 怎么修改函数(变量)名及其引用?全局修改(批量重命名)(ctrl + f6)
- mysql 主从复制优化、并行复制
- linux——sshd服务及其管理命令