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

news2024/11/27 16:34:56

一、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-8

import _thread
import time

def 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-8

import _thread
import time
import subprocess



def 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-8

import threading
import time
import requests

def fun1():
    time_start = time.time()
    r = requests.get(url='http://www.baidu.com')
    times = time.time()-time_start
    print('Status:%s---%s---%s'%(r.status_code,times,time.strftime('%H:%M:%S')))
    
def main():
    threads=[]
    
    threads_count = 10
    
    for 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-8

import threading
import queue

class DoRun(threading.Thread):#定义一个类DoRun
    def __init__(self,queue):#导入参数queue
        threading.Thread.__init__(self)
        self._queue = queue
        
    def run(self):
        while not self._queue.empty():
            ip = self._queue.get()
            print(ip)
            
def main():
    threads = []
    threads_count = 10
    queue1 = 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.coloradmin.cn/o/51600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs2019+Qt 使用 Qlabel 在界面上显示图像及显示失真问题

在使用 Qt 设计界面时,通常会涉及到在界面上显示图片的问题,而要在界面上显示图片需要使用控件 Qlabel 和 函数 QImage ,下面对控件和函数逐一做出介绍!!! 一、Qlabel 常见成员方法 1、setText(const QSt…

全国批发市场情况萧条,进销存系统或是业务转机

如今批发市场情况大不如前,越发惨淡,令人不禁扼腕叹息。让我们深入批发行业,撇开大环境因素,来究竟发现什么是导致批发市场的萧条现状的原因。 1、物流快速发展,失去地域优势 在90年代初,各地交通不便&…

idea相关配置-----java

导入项目 打开项目src的上一层目录即可 导入之后如果可以正常运行就不用看下面操作了, 如果不能运行可以参考下面内容 配置 1.jdk配置 2.添加项目jar包,然后应用 配置完成了 常用快捷键 快捷代码 sout 输出 forr 创建倒序 for循环 fori 创建 for循环…

国外Windows主机的特点

虚拟主机是一项为用户提供在线系统的服务,用于存储信息、图像、视频或其他可以通过互联网轻松访问的文件。而Windows虚拟主机是其中的一个类别,使用这款主机的用户需要和其他共享一个服务器——包括物理服务器和软件应用程序。目前,大多数应用…

Cesium For Unity3d 最新实践流程-2022-12-01

目录 Cesium-Unity3d 最新实践流程 一、前言 二、实践 1、Unity 安装 2、Cesium for Unity 下载 3、打开项目 4、编辑、运行项目 4、效果 Cesium For Unity3d 最新实践流程 一、前言 2022年11月30日晚11点30分,Cesium for Unity 开源插件预览版发布&#…

7.axios的基本使用

Axios是专注于网络数据请求的库,比jQuery更轻量,项目地址 下载解压后在dist中可以找到axios.js,在html文件中引用它就好了 目录 1 GET请求 2 POST请求 3 axios() 1 GET请求 服务是两个数相加 返回的res对象有六个属性,你…

【Python】基础语法1(常量与表达式、变量和类型、注释、输入输出、运算符)

文章目录1、常量与表达式2. 变量和类型2.1 变量是什么2.2 变量的语法2.3 变量的类型2.3.1整数2.3.2 浮点数2.3.3 字符串2.3.4 布尔2.3.5 其他2.4 变量类型的意义2.5 动态类型特性3. 注释3.1 注释的语法3.2 注释的规范4. 输入输出4.1 通过控制台输出4.2 通过控制台输入5. 运算符…

java - 数据结构,时间复杂度和空间复杂度

一、算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。 时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间&am…

子不语发生工商变更:注册资本增至3000万元,预计全年净利润下滑

近日,浙江子不语电子商务有限公司(下称“子不语”)发生工商变更,其中注册资本由2600万元增至3000万元。据天眼查信息显示,子不语的全资股东为ZIBUYU INTERNATIONAL LIMITED,法定代表人为华丙如。 据了解&am…

【前端验证】验证自动化脚本的最后一块拼图补全——gen_tb

我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵! 前言 在完成了 【芯片前端】可能是定向验证的巅峰之作——auto_testbench_尼德兰的喵的博客-CSDN博客 【python脚本】用于生成简单握手接口与自测环境的gen_uvm_agent脚本_尼德兰的喵的博客-CSDN博客 两个工具之后,对于…

[附源码]计算机毕业设计springboot体育器材及场地管理系统

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

Unity数字孪生UI设计——导入视频

Unity导入mp4或URL链接 1、准备视频 Uinty3D常用视频格式: mov、.mpg、.mpeg、.mp4、.avi .asf 如果都不识别,试试转换成ogv格式 转换完成之后,将视频素材文件拖入Uinty Assets文件夹内 2、创建UI及添加组件 1、右键Assets文件夹或任意文件夹→Create→Render Texture纹理渲…

七、Sleuth分布式链路请求跟踪

SpringCloud Sleuth分布式链路请求跟踪 概述 为什么会出现这个技术?需要解决哪些问题? 问题 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形…

[附源码]计算机毕业设计springboot面向高校活动聚App

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

半正定Toeplitz矩阵的范德蒙德分解

半正定Toeplitz矩阵的范德蒙德分解 Toeplitz矩阵的定义:Matrices whose entries are constant along each diagonal are called Toeplitz matrices. 形如 T[r0r1r2r3r−1r0r1r2r−2r−1r0r1r−3r−2r−1r0](1)\boldsymbol{T}\left[ \begin{matrix} r_0& r_1&…

前端开发调试技巧

1、alert弹框调试 正对js代码的调试&#xff0c;我们往往需要获取某些变量的值&#xff0c;于是在早期我们往往通过alert方法将变量的值通过弹窗的形式进行打印。 <script>alert(测试弹框) </script>2、console控制台打印 alert方法对于我们来说或许仍然比较繁琐…

专题·AC自动机

初见安——&#xff01;&#xff01;这里是咕咕咕好久好久的樱狸QvQ 考完初赛了 有一点点的空闲时间 来整理一下博客【因为发现忘性很大……超过一个月没用的东西就记不住了QAQ 前置知识&#xff1a;KMP&#xff0c;tire树。 一、AC自动机 其实AC自动机就是在tire树上KMP。 …

点击化学PEG试剂DBCO-PEG4-NHS,1427004-19-0知识特点总结

一、描述&#xff1a; DBCO-PEG4-NHS酯是一种含有NHS酯的点击化学PEG试剂&#xff0c;能够在中性或稍碱性条件下与伯胺&#xff08;例如赖氨酸残基的侧链或氨基硅烷涂层表面&#xff09;特异有效地反应&#xff0c;形成共价键。亲水性PEG间隔臂提高了水溶性&#xff0c;并提供了…

ConcurrentHashMap

我们说ConcurrentHashMap是用在多并发环境下的HashMap JDK1.7 segment数组HashEntry数组链表&#xff08;即两个数组挂一个链表&#xff09; 上锁的时候锁的是segment数组&#xff0c;采用分段锁&#xff0c;每一把锁只锁一个Segment&#xff0c;默认是这个数组大小为16&…

【D3.js】1.13-动态设置每个 Bar 的坐标

title: 【D3.js】1.13-动态设置每个 Bar 的坐标 date: 2022-12-01 16:33 tags: [JavaScript,CSS,HTML,D3.js,SVG] 虽然创建了多个rect&#xff0c;但是都重叠在一起&#xff0c;如何将他们分列开来呢&#xff1f; 一、学习目标 使用回调函数动态设置坐标 .attr(“x”,(d,i)>…