千家信息网

怎么进行Python多线程并发的简单测试

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,怎么进行Python多线程并发的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前也写了一些简单的Python程序,对于多线
千家信息网最后更新 2026年11月03日怎么进行Python多线程并发的简单测试

怎么进行Python多线程并发的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

之前也写了一些简单的Python程序,对于多线程的并发一直没有涉及,今天决定先突破一下,把这个部分的内容先快速的掌握,然后在这个基础上细化改进。

我的好友冰川擅长Python技术,所以就拿来主义,参考了他的文章。

python基础16-并发编程(1)

Python的程序性能一直受到诟病,但是功能,扩展性上还是具有很大的优势,程序中有一部分的概念就是并发,多线程相关的,所以我们也算是大跃进一下。

说到Python的性能,GIL是需要了解的,这是一个全局解释器锁,保证在同一时刻只有一个线程在运行,在保证线程安全的同时,性能上会受到一定的影响。我们简单来做一个案例,在上面的文章中已经有了,我们简单改一下。测试一把。

首先要准备一个文件urls.txt

比如我的技术博客,我随便选择了两篇文章的下标,然后就可以循环生成一大批的urls.txt内容来。

for i in {2101076..2148323}

do

echo "http://blog.itpub.net/23718752/viewspace-"$i

done

要测试url的信息,我们需要引入一个模块requests,通过发送请求来得到反馈的结果,如果是在200,300这样的状态值,就说明是可访问的,否则就是不可方案问。

需要注意的地方或者是一些小技巧,我们可以使用strip()来得到一个串

>>> "http://www.jeanron100.com".strip()

'http://www.jeanron100.com'

,然后使用requests.get方法来得到结果值

>>> requests.get('http://www.baidu.com')

最终的状态值可以使用status_code属性来得到。

>>> requests.get('http://www.baidu.com').status_code

200

明白了这些要点,Python程序就会容易很多。

直接附上源程序:

#!/usr/bin/evn python

import requests

import time

def get_site_code(url):

r = requests.get(url)

status = r.status_code

line = url + ' ' + str(status)

with open('/tmp/site_stauts.txt', 'a+') as f:

f.writelines(line + 'n')

if __name__ == '__main__':

print 'starting at:', time.ctime()

for url in open('urls.txt'):

url = url.strip()

get_site_code(url)

print 'Done at:', time.ctime()

整个过程,大概耗时37秒钟,urls大概是30多个。

# python a.pl

starting at: Wed Dec 6 07:00:34 2017

Done at: Wed Dec 6 07:01:11 2017

我们再来看看多线程的部分,毫无疑问,我们需要一个线程相关的模块,在这里就是threading

我们可以直接开启多个线程,不做线程的粒度控制,比如现在有30个请求,直接就是30个线程,暂时没有做成线程池的那种模式,初始化的时候,可以使用如下的方式来初始化线程。

threading.Thread(target=get_site_code, args=(url,))

使用start方法启动线程

threads[i].start()

如果一个线程在执行过程中要调用另外一个线程,需要等到它完成以后才能接着执行,在这里就是join方法。

threads[i].join()

源程序如下:

#!/usr/bin/evn python

import requests

import time

import threading

def get_site_code(url):

r = requests.get(url)

status = r.status_code

line = url + ' ' + str(status)

with open('/tmp/site_stauts.txt', 'a+') as f:

f.writelines(line + 'n')

if __name__ == '__main__':

print 'starting at:', time.ctime()

threads = []

for url in open('urls.txt'):

url = url.strip()

t = threading.Thread(target=get_site_code, args=(url,))

threads.append(t)

for i in range(len(threads)):

threads[i].start()

for i in range(len(threads)):

threads[i].join()

print 'Done at:', time.ctime()

使用了多线程之后,耗时大概是3秒钟,提高了10多倍,收益还是很大的。

# python b.pl

starting at: Wed Dec 6 07:24:36 2017

Done at: Wed Dec 6 07:24:39 2017

随后会考虑从其他的角度来持续的改进,改进的空间依旧很大。

关于怎么进行Python多线程并发的简单测试问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

线程 就是 测试 方法 程序 很大 内容 性能 问题 基础 多个 技术 文章 更多 模块 源程序 状态 状态值 篇文章 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 广东万易互联网科技有限公司惠州分公司 互联网金融监管科技数据 美国互联网科技巨头监管 狮子座互联网科技 深圳齐家互联网科技 互联网科技论坛 成都玖崟互联网科技有限公司乐商圈怎么样 现代科技和互联网有关系吗 天速互联网络科技有限公司 互联网科技热点资讯 福州新华互联网科技学校 知乎 小米互联网科技园设置 互联网科技公司实习生 互联网媒体平台算高科技产业 朱啸虎曾投资哪些互联网科技企业 江苏苏星互联网科技有限公司 35岁以上互联网科技行业 中国新注册互联网科技 互联网科技机房 麻工互联网科技 美国互联网科技 西安互联网科技公司 互联网金融 科技创新 联恩商钥互联网科技有限公司 太原新华互联网科技学校怎么样 阿里巴巴算科技企业还是互联网 宜昌元轩互联网科技有限公司 呼和浩特新华互联网科技学院 恒生互联网科技趋势
0