尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
python多线程并发测试过程
进行多线程并发测试的过程。更新时间为2025年05月27日15点25分35秒, 作者是姑娘别秃头。这篇文章主要的内容是介绍了关于多线程并发的测试过程, 这样的资料是具有非常好的参考价值的, 希望能够帮助到大家, 如果文章中存在错误或没有考虑完全的情况, 希望读者能够不吝赐教。一、并发和并行, 这两个概念到底有什么区别呢。1、所谓的多任务这个概念, 指的是操作系统具备同时运行多个任务的能力。2、关于并发, 它指的是任务的数量超过了cpu的核数这种情况。借助操作系统的任务调度算法,多个任务可以同时执行。实际情况是, 总有部分任务不能同时进行。原因是任务切换的速度极快。从宏观视角来看, 这些任务是并行处理的。从微观视角来看, 并不是所有任务都在同时运行。3、所谓并行, 它指的是任务的总数量要少于处理器的核心数量这种情况。在这种情况下, 任务们是真正地同步在一块儿执行工作的。多线程它们其实都是一种并发的状态。这样做有一个缺点, 就是它运行的速度会比并行要慢一些。二、关于同步与异步的概念是什么?1、所谓的同步, 就是在行动步调方面实现协同一致。def work():print(1)def work2():print(2)if __name__ __main__:work()work2()2、所谓异步, 指的是事物的运行节奏或者步骤各不相同。三、我们需要去搞清楚, 线程和进程之间到底存在着什么样的区别?1、线程是存在于进程内部的组成部分, 当启动一个程序的时候系统会先启动对应的进程, 然后由这个进程去调用相关的线程来具体地执行各种任务。2、线程这个东西, 它其实是依赖进程而存在的。3、这个线程是允许被抢占的, 换句话说, 也可以说这个线程会被突然中断。需求是, 要使用多线程来分别执行那些不同的任务。1、函数它是通过这样的一种函数式方法来实现的, 也就是说, 要去调用那些存在于模块内部的括号函数来完成新线程的产生工作。thread.start_new_thread ( function, args[, kwargs] )参数说明主任务在执行的时候, 不会去管那些被它分出去的副任务是不是已经干完了。import timeimport threading as td#为线程定义一个函数def asr_test1(url):print(start)print(time.ctime(time.time()))def asr_test2(url):print(end)print(time.ctime(time.time()))if __name__ __main__:#target为函数名args为元组函数一定要输入形参t1td.Thread(targetasr_test1,args(,))t2 td.Thread(targetasr_test1, args(,))t1.start()t2.start()结果startFri Aug 5 16:03:05 2022startFri Aug 5 16:03:05 2022示例2、主线程等待子线程执行完毕import threading as thdef work():print(1)def work2():print(2)#原理启动时会调用python进程进程调用主线程。if __name__ __main__:子线程启动start_time time.time()t1th.Thread(targetwork)t2 th.Thread(targetwork2)t1.start()t2.start()#主线程不会等待# t1.join(5)#设置主线程等待子线程的执行时间end time.time() - start_timeprint(end)为程序员提供了那些非常底层的、最为原始的关于线程操作的API, 并且同时也提供了一个相对简单的锁功能。该类所提供的方法如下所述。2、类包装线程对象需求2多线程执行相同任务1.并发性线程是并发运行的, 同时各个线程之间会共享内存。相关的程序代码展现如下, 其包含重写run方法以及继承类的内容。import timefrom threading import ThreadThread其他初始化参数target:指定任务函数name:指定线程分组class MyThread(Thread):def run(self):for i in range(100):time.sleep(0.1)print(请求第{}次.format(self.name,i))if __name__ __main__:for i in range(5):tMyThread(namef线程{i1})t.start()首先, 我们要将第一个参数进行传递。def work(name,age):for i in range(5):# time.sleep(1)print({}work1----{}---{}.format(name,i,age))if __name__ __main__:#给任务函数传递参数方式一args参数里面是元组# tThread(targetwork,args(,))# t.start()#方式2kargst2 Thread(targetwork, kwargs{name:wupig,age:18})t2.start()把参数进行传递, 让继承类来获取。2.在多线程运行的那个环节里面, 大家去共享同一个资源, 就容易出现各种因为竞争这个资源而产生的各种各样的问题。1、它无法以并行的模式来运行, 其核心原因是存在全局解释器锁, 也就是GIL这个因素在里面搞鬼, 因为同一时间段内只能够有一个线程真正地在执行操作, 所谓的通过多线程方式来达成的其实是并发效果, 这种状态在经过了解释器的处理环节之后, 会进入到线程调度的流程里面去, 而关于线程切换的具体机制是怎样的呢。2、线程在运行过程中遭遇了会耗费大量时间的输入输出操作, 比如睡眠、网络输入输出或者是文件输入输出。这时候解释器会把锁释放掉, 然后进行线程之间的切换去执行其他任务, 待之后再次尝试获取那个全局锁的时候才能继续往下走。3、线程执行时间达到一定的阈值面试采取第一种处理办法, 那就是为代码加上锁。解决方法二队列死锁案例需求1、我们来进行并发读取本地文件的操作。2、通过并发的方式获取到对应的url地址信息。在xxx.txt这个文件内部是存在非常多URL地址的情况的, 因此当前的需求是针对这些地址进行多并发获取操作。需求并发读取txt中的URL地址list_test[]filename../../url.txtfileopen(filename,r)#列表推导式list_test[i.strip(\n) for i in file]def audio_test():while list_test:urllist_test.pop()print(url)def atest_thread(THREAD_MAX, Test_Script):#创建空列表thread_list []for i in range(int(THREAD_MAX)):# print(**************,i)thread_name thread- str(i)print(thread_name,thread_name)new_thread threading.Thread(targetTest_Script, args, namethread_name)thread_list.append(new_thread)new_thread.start()for thread_obj in thread_list:#thread_obj.join等待至线程中止thread_obj.join()if __name__ __main__:starttimetime.time()count 10# THREAD_MAX10atest_thread(count, audio_test)endtimetime.time()-starttimeprint(endtime)占坑这种情况就只剩下了一个线程在执行任务了。我们需要去创建一个列表, 接着把线程放进这个列表里面去, 然后去对列表进行循环遍历的操作, 这样来对JSON数据进行相关的处理。总结上面的内容都是我自己的一些经验之谈, 希望能够给到大家提供一个具有参考价值的意见, 同时也希望大家能够多多地去支持脚本之家这个平台。
RELATED

相关推荐

游戏控制器适配测试全解:从设备识别到可访问性优化

游戏控制器适配测试全解:从设备识别到可访问性优化

游戏可访问性测试里,控制器适配是最容易被低估的一环。手柄、键盘鼠标、无障碍控制器、自定义外设,每一种输入设备的差异,都可能让玩家卡在一个明明已经设计好的关卡前。我做了几年游戏测试,见过太多项目把“支持手柄”当成“控制…

📅 2026/10/1 11:53:01
如何安全运行AI生成的代码?Spring AI Alibaba DataAgent的Python沙箱实践:Docker隔离+PEP 723动态依赖

如何安全运行AI生成的代码?Spring AI Alibaba DataAgent的Python沙箱实践:Docker隔离+PEP 723动态依赖

如何安全运行AI生成的代码?Spring AI Alibaba DataAgent的Python沙箱实践:Docker隔离PEP 723动态依赖 【免费下载链接】DataAgent Spring AI Alibaba DataAgent 项目地址: https://gitcode.com/gh_mirrors/da/DataAgent AI 生成的 Python 代码直接…

📅 2026/10/1 11:53:01
Docker Compose安装与实战:unknown command排查指南

Docker Compose安装与实战:unknown command排查指南

“docker: unknown command: docker compose”——这大概是过去一年我在各种技术群里看到频率最高的报错。很多人拿着新写的compose.yaml文件,复制粘贴docker compose up -d,终端啪地甩出这么一行,整个人就懵了:明明Docker装得好好…

📅 2026/10/1 11:48:01
MORE NEWS

更多资讯

📰

Python爬虫实战:从豆瓣短评到中文词云生成保姆级教程

前两天帮朋友处理了一个小需求:把一部电影在豆瓣上的最新短评爬下来,生成一张词云图看看观众都在聊什么。当时顺手写了个Python脚本,从requests爬评论,到jieba分词,再到wordcloud生成词云,前后加起来不到两…

📰

Vue + Electron 入门:从主进程IPC通信到打包避坑指南

Vue Electron 开发入门教程 如果你是一个Web前端开发者,想用自己熟悉的Vue技术栈做一款桌面应用,Electron几乎是最省事的路径。不用学新的UI框架,不用重新啃原生API,HTML、CSS、JavaScript 那套理论直接搬过来,再加上…

📰

前端Web组态软件选型实战:图元、协议、渲染与国产化深度解析

1. 为什么前端 Web 组态软件正在成为工业数字化落地的关键支点最近半年,我连续参与了三个中型制造企业的可视化监控平台升级项目,从最初被要求“做个大屏看数据”,到客户主动提出“要能拖拽改画面、连PLC不用写代码、运维人员自己就能调参数”…

📰

HER强化学习目标重标记:破解稀疏奖励难题的实用指南

1. 先搞清楚 hindsight 到底在解决什么问题 先别急着看代码,我需要先讲清楚为什么会有 hindsight 这个东西。如果你是刚接触强化学习不久的读者,大概率遇到过这种场景:写了个 DDPG 或者 PPO,在 Gym 的拿物体、推箱子这类任务上训练…

📰

连续时间傅里叶变换直觉指南:从波形到频谱的工程思维

这一章题目看着是教科书里的标准章节,但“连续时间傅里叶变换”这东西,恰恰是我见过最容易“背了一堆公式却不知道在干嘛”的内容。当年我学到这里,变换对、性质、收敛条件背得滚瓜烂熟,考试也没问题。直到工作后参与一个音频处理…

📰

普通显卡可训练的自研神经网络Waver-SNN-SSM

1. 项目概述:为什么一个“普通显卡可训练”的自研神经网络值得认真对待 “个人开源自研神经网络!普通显卡可训练!!”——这个标题乍看像极了技术社区里常见的流量型口号,但拆开来看,每个词都踩在当下AI开发…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬