python安全工具开发笔记(三)——python 多线程

news/2024/5/18 15:59:51/文章来源:https://blog.csdn.net/weixin_40412037/article/details/126714193

一、Python线程和进程

进程

进程是程序的一次执行。每个进程都有自己的地址空间、内存、数据栈及其它记录其运行轨迹的辅助数据。

线程

所有的线程运行在同一个进程当中,共享相同的运行环境。线程有开始顺序执行和结束三个部分。

帮助理解:
1、计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。
2、假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行—个任务。
3、进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
4、一个车间里,可以有很多工人。他们协同完成一个任务。
5、线程就好比车间里的工人。一个进程可以包括多个线程。

二、thread模块

start_new_thread(function, args kwargs=None)

产生一个新的线程,在新的线程中用指定的参数和可选的kwargs来调用这个函数

注意: 使用这种方法时,一定要加time.sleep(),否则每个线程将可能不执行。此方法还有一个缺点,遇到较复杂的问题时,线程数不易控制。

示例一:测试多线程程序是否在同一时刻运行
python 3 中是 import _thread

#coding=utf-8import _thread
import timedef fun1():print ("Hello Word! %s" %time.ctime())def main():
#测试程序是否在同一时刻运行_thread.start_new_thread(fun1,())_thread.start_new_thread(fun1,())time.sleep(2)#休眠两秒if __name__=="__main__":    main()

在这里插入图片描述

示例二:多线程测试存活的116.211.155.0/24段的主机

#coding=utf-8import _thread
import time
import subprocessdef ping_check(ip):result = subprocess.Popen("ping "+ip, stdout=subprocess.PIPE)result = result.stdout.read().decode('utf-8','ignore')if '=' in result:print('%s ip up' %ip)def main():for i in range(1,30):ip = '116.211.155.'+str(i)_thread.start_new_thread(ping_check,(ip,))time.sleep(5)if __name__=="__main__":    main()

在这里插入图片描述

三、threading模块

1、Thread类

  • 使用threading模块
  • 子类化Thread类

解决了线程数可控的问题

2、生产者-消费者问题和Queue模块

  • Queue模块( qsize()、empty()、full()、put()、get() )
  • 完美搭档:Queue +Thread

解决了生产参数和计算结果时间都不确定的问题
示例一:测试是否是同一时间多线程输输出Hello…
在这里插入图片描述
示例二:10个线程请求百度,并输出请求百度网站返回的状态码和请求时间

#coding=utf-8import threading
import time
import requestsdef fun1():time_start = time.time()r = requests.get(url='http://www.baidu.com')times = time.time()-time_startprint('Status:%s---%s---%s'%(r.status_code,times,time.strftime('%H:%M:%S')))def main():threads=[]threads_count = 10for i in range(threads_count):t = threading.Thread(target=fun1,args=())threads.append(t)for i in range(threads_count):threads[i].start()for i in range(threads_count):threads[i].join()if __name__=="__main__":    main()

在这里插入图片描述
示例三:queue库介绍

>>> import queue
>>> queue = queue.Queue()
>>> for i in range(10):
...     queue.put(i)
...
>>> queue.empty()
False
>>> queue.qsize()
10
>>> queue.get()
0
>>> queue.get()
1
>>> queue.get()
2
>>> queue.get()
3
>>> queue.get()
4
>>> queue.get()
5
>>> queue.get()
6
>>> queue.get()
7

依次取出当中的数据
在这里插入图片描述
示例四:以10线程从queue库取数

#coding=utf-8import threading
import queueclass DoRun(threading.Thread):#定义一个类DoRundef __init__(self,queue):#导入参数queuethreading.Thread.__init__(self)self._queue = queuedef run(self):while not self._queue.empty():ip = self._queue.get()print(ip)def main():threads = []threads_count = 10queue1 = queue.Queue()#此处用queue1 = queue.Queue()的话 会报UnboundLocalError,局部变量使用前未初始化for i in range(1,255):queue1.put('111.47.226.'+str(i))for i in range(threads_count):threads.append(DoRun(queue1))for i in threads:i.start()for i in threads:i.join()if __name__=="__main__":    main()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228626.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VM系列振弦采集模块传感器激励方法

VM系列振弦采集模块传感器激励方法 通过修改寄存器 EX_METH.[3:0]来完成激励方法的选择, EX_METH[4]用于设置是否忽略传感器的接入检测而强制发送激励信号。 高压脉冲激励法 高压脉冲激励法 HPM( High Voltage Pulse Excitation Method)。 向…

桌面画图工具:Pointofix(fertig)

Pointofix桌面画图工具 Pointofix - der virtuelle Textmarker fr Ihren Bildschirm - Freeware 一、软件下载 官方网址https://www.pointofix.de/ 二、进入下载页面,需要下载安装文件和语言包两个文件 三、网站还提供了一个语言设置小程序,但我没用 …

教师如何创建百度百科词条?这篇带你了解

互联网时代,如果你是小有名气的人物,或是某个领域的专家,对于社会有一定的贡献或是影响力,就可以在百度上搜到一个你的专属词条。 百度百科词条就是个人的一张网络名片,人物的一些基本信息、生平事迹、代表作品、所获…

mac下安装nodejs跟vscode

1.打开官网 Node.js 2.点击下载 3.下载完成,根据提示下一步安装,安装完成后,在vscode中新建一个js文件,执行node test.js

基于STM32单片机的篮球计时记分器proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示比赛剩余时间,球队分数 2.默认计时器为4节,每节10分钟,每节比赛结束,蜂鸣器报警 3.按键功能介绍: 1’键——加1分 4’键——减1分 2’键——加2分 5’键—…

[附源码]计算机毕业设计springboot人体健康管理app

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

静态路由配置案例

静态路由配置案例配置静态路由原理命令:案例:最后结果:配置静态路由原理命令: [Huawei]ip route-static 来源ip 子网掩码 去向ip [Huawei]ip route-static 192.168.20.1 255.255.255.0 192.168.1.2 案例: pc1,pc2,a…

MySQL数据库实现主从复制,docker实现版

我这里是在同一台电脑上使用docker实现的主从复制,在物理机上整体思路是一致的 预备工作:安装好docker 使用docker运行MySQL 拉取MySQL镜像 docker pull mysql:5.7运行mysql master容器 sudo docker run -p 33061:3306 --name mysql-master-v /myda…

Docker with IPV6

1、绪论 在 Docker 容器或群服务中使用 IPv6 之前,您需要在 Docker 守护进程中启用 IPv6 支持。之后,您可以选择对任何容器、服务或网络使用 IPv4 或 IPv6(或两者) 2、配置默认 Docker IPv6 注意:IPv6 网络仅在 Lin…

揭秘你代理商做不起来货卖不出去的原因,探讨其背后的商业逻辑

现在很多代理商,大都是可以归于“个体户”性质。这些也代表了微小型企业,从前期的蓬勃发展,到现在的经营受限,特别是疫情等影响,很多人的经营都处于举步维艰的状态,如果你们现在是代理商,仓库里…

【Ubuntu】修改ubuntu和windows双系统启动顺序

目录一、问题描述二、背景知识1. GRUB是什么2. GRUB配置文件3./etc/default/grub 主配置文件二、问题分析三、解决方案1. 修改grub主配置文件2. 更新grub配置文件一、问题描述 UbuntuWindows双系统默认使用GRUB作为引导管理器,而且通常默认启动Ubuntu。这样过于死板…

CrossOver2023虚拟机软件安装双系统教程

您喜欢切换Windows系统吗?喜欢?好吧,您随意。对于其他人而言,想要不依赖于笨重的 Windows 模拟器就能在您的 Mac 系统上运行微软的应用程序,CrossOver是最简单的方式。讲真,您试过模拟器了吗?您…

美信监控易:网络管理之链路专线管理

专线通常是指运营商为企事业单位提供的专用网络线路,用于满足其业务需求。专线管理可以提供对专线基础信息的维护,以及性能数据的监测能力。通过系统自动地、周期性地执行专线测试,获取指标数据,实现专线连通性、性能数据的全面感…

DDD的简单落地实现

目录 概述 和微服务的联系 具体划分 遵循依赖倒置原则 其他规范 具体实现代码 总结 概述 领域式驱动(DDD) 这种模式的核心就是根据功能去划分领域,然后在这个领域内只做这个领域的事情。 和微服务的联系 和微服务有什么类似的地方&am…

[附源码]Python计算机毕业设计Django高校车辆管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

浅浅的计算机网络知识

目录 计算机网络(连接分散计算机设备以实现信息传递的系统)_百度百科 传输协议 传输层次 通信 计算机网络协议分层结构 开放系统互连参考模型的特点 IPv4协议 IPv6协议 FTP HTTP 网络传输协议 较为系统框架 先面向百度搭建理解框架 计算机网…

【OpenCV-Python】教程:3-10 直方图(4)直方图反向投影

OpenCV Python 直方图 反向投影 【目标】 直方图反向投影calcBackProject 【原理】 用于图像分割和查找感兴趣目标。简单的说,会创建一个与输入图像同样大小的图像(单通道),每个像素对应像素属于目标的概率。更简单的说就是&am…

model.eval 至关重要!!!!model.eval()是否开启 BN 和 Dropout 的不同

之前写过一个项目,eval的时候很正常,但是一infer就有问题,多次排查发现,原来就是只缺一个 model.eval()哇,重大教训,我debug好久,在小姑娘面前翻车… 🤣🤣🤣…

HBase 开发:使用Java操作HBase 第1关:创建表

为了完成本关任务,你需要掌握:1.如何使用Java连接HBase数据库,2.如何使用Java代码在HBase中创建表。 如何使用Java连接HBase数据库 Java连接HBase需要两个类: HBaseConfigurationConnectionFactoryHBaseConfiguration 要连接HBase…

RK3588平台开发系列讲解(PWM篇)PWM及backlight的使用方法

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、PWM驱动二、DTS配置三、PWM在user space的使用四、PWM在背光中的使用4.1 Backlight DTS4.2 PWM Backlight 调试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍PWM以及backli…