python 测试磁盘读写速度和内存读写速度.

import time 
import os
# from SpeedTest import perform_default_speedtest# 测试硬盘读写速度
def test_disk_speed():filename = "./testfile.bin"# 生成一个1GB大小的测试文件with open(filename, "wb") as f:f.write(os.urandom(1024*1024*1024))# 从磁盘读取文件并记录时间start_time = time.time()with open(filename, "rb") as f:while f.read(1024*1024):passend_time = time.time()# 计算磁盘读取速度speed = os.path.getsize(filename) / (end_time - start_time) / (1024*1024)print("磁盘读取速度: %.2f MB/s" % speed)# 删除测试文件os.remove(filename)# 测试内存读写速度
def test_memory_speed():# 生成一个1GB大小的测试数据data = bytearray(os.urandom(1024*1024*1024))# 从内存读取数据并记录时间start_time = time.time()for i in range(1024):chunk = data[i*1024*1024:(i+1)*1024*1024]end_time = time.time()# 计算内存读取速度speed = len(data) / (end_time - start_time) / (1024*1024)print("内存读取速度: %.2f MB/s" % speed)# 测试网络速度
# def test_network_speed():# 创建 SpeedTest 实例# speedtest = SpeedTest("www.speedtest.cn", debug=1, runs=2)# perform_detault_speedtest("www.speedtest.cn")# st = SpeedTest()# # 测试下载速度# download_speed = st.download() / (1024**2)  # 将结果转换成 MB/s# print("下载速度: %.2f MB/s" % download_speed)# # 测试上传速度# upload_speed = st.upload() / (1024**2)  # 将结果转换成 MB/s# print("上传速度: %.2f MB/s" % upload_speed)# # 测试延迟# ping = st.ping()# print("延迟: %.2f ms" % ping)if __name__ == "__main__":# test_network_speed()test_disk_speed()test_memory_speed()

下面是 SpeedTest .py文件内容. 用来测试网络速度的. 但是目前似乎有问题. 应该是规则变了 .
后来改用了一个linux的命令行工具进行的网速测试.

#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import print_functionimport argparse
import bisect
import itertools
import logging
import random
import re
import string
import sys
import platformfrom math import sqrt
from threading import currentThread, Thread
from time import timetry:from httplib import HTTPConnection
except ImportError:from http.client import HTTPConnectiontry:from urllib import urlencode
except ImportError:from urllib.parse import urlencode__program__ = 'pyspeedtest'
__version__ = '1.2.7'
__description__ = 'Test your bandwidth speed using Speedtest.net servers.'__supported_formats__ = ('default', 'json', 'xml')class SpeedTest(object):USER_AGENTS = {'Linux': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0','Darwin': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0','Windows': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0','Java': 'Java/1.6.0_12',}DOWNLOAD_FILES = ['/speedtest/random350x350.jpg','/speedtest/random500x500.jpg','/speedtest/random1500x1500.jpg']UPLOAD_FILES = [132884,493638]ALPHABET = string.digits + string.ascii_lettersdef __init__(self, host=None, http_debug=0, runs=2):self._host = hostself.http_debug = http_debugself.runs = runs@propertydef host(self):if not self._host:self._host = self.chooseserver()return self._host@host.setterdef host(self, new_host):self._host = new_hostdef connect(self, url):try:connection = HTTPConnection(url)connection.set_debuglevel(self.http_debug)connection.connect()return connectionexcept:raise Exception('Unable to connect to %r' % url)def downloadthread(self, connection, url):connection.request('GET', url, None, {'Connection': 'Keep-Alive'})response = connection.getresponse()self_thread = currentThread()self_thread.downloaded = len(response.read())def download(self):total_downloaded = 0connections = [self.connect(self.host) for i in range(self.runs)]total_start_time = time()for current_file in SpeedTest.DOWNLOAD_FILES:threads = []for run in range(self.runs):thread = Thread(target=self.downloadthread,args=(connections[run],'%s?x=%d' % (current_file, int(time() * 1000))))thread.run_number = run + 1thread.start()threads.append(thread)for thread in threads:thread.join()total_downloaded += thread.downloadedLOG.debug('Run %d for %s finished',thread.run_number, current_file)total_ms = (time() - total_start_time) * 1000for connection in connections:connection.close()LOG.info('Took %d ms to download %d bytes',total_ms, total_downloaded)return total_downloaded * 8000 / total_msdef uploadthread(self, connection, data):url = '/speedtest/upload.php?x=%d' % randint()connection.request('POST', url, data, {'Connection': 'Keep-Alive','Content-Type': 'application/x-www-form-urlencoded'})response = connection.getresponse()reply = response.read().decode('utf-8')self_thread = currentThread()self_thread.uploaded = int(reply.split('=')[1])def upload(self):connections = [self.connect(self.host) for i in range(self.runs)]post_data = [urlencode({'content0': content(s)}) for s in SpeedTest.UPLOAD_FILES]total_uploaded = 0total_start_time = time()for data in post_data:threads = []for run in range(self.runs):thread = Thread(target=self.uploadthread,args=(connections[run], data))thread.run_number = run + 1thread.start()threads.append(thread)for thread in threads:thread.join()LOG.debug('Run %d for %d bytes finished',thread.run_number, thread.uploaded)total_uploaded += thread.uploadedtotal_ms = (time() - total_start_time) * 1000for connection in connections:connection.close()LOG.info('Took %d ms to upload %d bytes',total_ms, total_uploaded)return total_uploaded * 8000 / total_msdef ping(self, server=None):if not server:server = self.hostconnection = self.connect(server)times = []worst = 0for _ in range(5):total_start_time = time()connection.request('GET','/speedtest/latency.txt?x=%d' % randint(),None,{'Connection': 'Keep-Alive'})response = connection.getresponse()response.read()total_ms = time() - total_start_timetimes.append(total_ms)if total_ms > worst:worst = total_mstimes.remove(worst)total_ms = sum(times) * 250  # * 1000 / number of tries (4) = 250connection.close()LOG.debug('Latency for %s - %d', server, total_ms)return total_msdef chooseserver(self):connection = self.connect('www.speedtest.cn')now = int(time() * 1000)# really contribute to speedtest.net OS statistics# maybe they won't block us again...extra_headers = {'Connection': 'Keep-Alive','User-Agent': self.USER_AGENTS.get(platform.system(), self.USER_AGENTS['Linux'])}connection.request('GET', '/speedtest-config.php?x=%d' % now, None, extra_headers)response = connection.getresponse()reply = response.read().decode('utf-8')match = re.search(r'<client ip="([^"]*)" lat="([^"]*)" lon="([^"]*)"', reply)location = Noneif match is None:LOG.info('Failed to retrieve coordinates')return Nonelocation = match.groups()LOG.info('Your IP: %s', location[0])LOG.info('Your latitude: %s', location[1])LOG.info('Your longitude: %s', location[2])connection.request('GET', '/speedtest-servers.php?x=%d' % now, None, extra_headers)response = connection.getresponse()reply = response.read().decode('utf-8')server_list = re.findall(r'<server url="([^"]*)" lat="([^"]*)" lon="([^"]*)"', reply)my_lat = float(location[1])my_lon = float(location[2])sorted_server_list = []for server in server_list:s_lat = float(server[1])s_lon = float(server[2])distance = sqrt(pow(s_lat - my_lat, 2) + pow(s_lon - my_lon, 2))bisect.insort_left(sorted_server_list, (distance, server[0]))best_server = (999999, '')for server in sorted_server_list[:10]:LOG.debug(server[1])match = re.search(r'http://([^/]+)/speedtest/upload\.php', server[1])if match is None:continueserver_host = match.groups()[0]latency = self.ping(server_host)if latency < best_server[0]:best_server = (latency, server_host)if not best_server[1]:raise Exception('Cannot find a test server')LOG.debug('Best server: %s', best_server[1])return best_server[1]def content(length):"""Return alphanumeric string of indicated length."""cycle = itertools.cycle(SpeedTest.ALPHABET)return ''.join(next(cycle) for i in range(length))def init_logging(loglevel=logging.WARNING):"""Initialize program logger."""scriptlogger = logging.getLogger(__program__)# ensure logger is not reconfigured# it would be nice to use hasHandlers here, but that's Python 3 onlyif not scriptlogger.handlers:# set log levelscriptlogger.setLevel(loglevel)# log message formatfmt = '%(name)s:%(levelname)s: %(message)s'# configure terminal logstreamhandler = logging.StreamHandler()streamhandler.setFormatter(logging.Formatter(fmt))scriptlogger.addHandler(streamhandler)def parseargs(args):class SmartFormatter(argparse.HelpFormatter):def _split_lines(self, text, width):"""argparse.RawTextHelpFormatter._split_lines"""if text.startswith('r|'):return text[2:].splitlines()return argparse.HelpFormatter._split_lines(self, text, width)def positive_int(value):try:ivalue = int(value)if ivalue < 0:raise ValueErrorreturn ivalueexcept ValueError:raise argparse.ArgumentTypeError('invalid positive int value: %r' % value)def format_enum(value):if value.lower() not in __supported_formats__:raise argparse.ArgumentTypeError('output format not supported: %r' % value)return valueparser = argparse.ArgumentParser(add_help=False,description=__description__,formatter_class=SmartFormatter,usage='%(prog)s [OPTION]...')parser.add_argument('-d', '--debug',default=0,help='set http connection debug level (default is 0)',metavar='L',type=positive_int)parser.add_argument('-h', '--help',action='help',help=argparse.SUPPRESS)parser.add_argument('-m', '--mode',choices=range(1, 8),default=7,help='''r|test mode: 1 - download2 - upload4 - ping1 + 2 + 4 = 7 - all (default)''',metavar='M',type=int)parser.add_argument('-r', '--runs',default=2,help='use N runs (default is 2)',metavar='N',type=positive_int)parser.add_argument('-s', '--server',help='use specific server',metavar='H')parser.add_argument('-f', '--format',default='default',help='output format ' + str(__supported_formats__),metavar='F',type=format_enum)parser.add_argument('-v', '--verbose',action='store_true',dest='verbose',help='output additional information')parser.add_argument('--version',action='version',version='%(prog)s ' + __version__)return parser.parse_args(args)def perform_default_speedtest(server,debug=0,runs=2, format='default'):speedtest = SpeedTest(server, debug, runs)if format in __supported_formats__:if format == 'default':print('Using server: %s' % speedtest.host)#if mode & 4 == 4:print('Ping: %d ms' % speedtest.ping())#if mode & 1 == 1:print('Download speed: %s' % pretty_speed(speedtest.download()))#if mode & 2 == 2:print('Upload speed: %s' % pretty_speed(speedtest.upload()))else:stats = dict(server=speedtest.host)#if mode & 4 == 4:stats['ping'] = speedtest.ping()#if mode & 1 == 1:stats['download'] = speedtest.download()#if mode & 2 == 2:stats['upload'] = speedtest.upload()if format == 'json':from json import dumpsprint(dumps(stats))elif format == 'xml':from xml.etree.ElementTree import Element, tostringxml = Element('data')for key, val in stats.items():child = Element(key)child.text = str(val)xml.append(child)print(tostring(xml).decode('utf-8'))else:raise Exception('Output format not supported: %s' % format)def perform_speedtest(opts):speedtest = SpeedTest(opts.server, opts.debug, opts.runs)if opts.format in __supported_formats__:if opts.format == 'default':print('Using server: %s' % speedtest.host)if opts.mode & 4 == 4:print('Ping: %d ms' % speedtest.ping())if opts.mode & 1 == 1:print('Download speed: %s' % pretty_speed(speedtest.download()))if opts.mode & 2 == 2:print('Upload speed: %s' % pretty_speed(speedtest.upload()))else:stats = dict(server=speedtest.host)if opts.mode & 4 == 4:stats['ping'] = speedtest.ping()if opts.mode & 1 == 1:stats['download'] = speedtest.download()if opts.mode & 2 == 2:stats['upload'] = speedtest.upload()if opts.format == 'json':from json import dumpsprint(dumps(stats))elif opts.format == 'xml':from xml.etree.ElementTree import Element, tostringxml = Element('data')for key, val in stats.items():child = Element(key)child.text = str(val)xml.append(child)print(tostring(xml).decode('utf-8'))else:raise Exception('Output format not supported: %s' % opts.format)def main(args=None):opts = parseargs(args)init_logging(logging.DEBUG if opts.verbose else logging.WARNING)try:perform_speedtest(opts)except Exception as e:if opts.verbose:LOG.exception(e)else:LOG.error(e)sys.exit(1)def pretty_speed(speed):units = ['bps', 'Kbps', 'Mbps', 'Gbps']unit = 0while speed >= 1024:speed /= 1024unit += 1return '%0.2f %s' % (speed, units[unit])def randint():"""Return a random 12 digit integer."""return random.randint(100000000000, 999999999999)LOG = logging.getLogger(__program__)if __name__ == '__main__':main()

安装网络测试 命令行工具

curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | sudo bashsudo yum install speedtest

执行网络测试用命令

/usr/bin/speedtest 

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

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

相关文章

C语言手撕单链表

一、链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;也就是内存存储不是像顺序表那么连续存储&#xff0c;而是以结点的形式一块一块存储在堆上的&#xff08;用动态内存开辟&#xff09;。 既然在内存上不是连续存储&#xff0c;那我们如何将这一…

Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理

一、前言 ffmpeg的版本众多&#xff0c;从2010年开始计算的项目的话&#xff0c;基本上还在使用的有ffmpeg2/3/4/5/6&#xff0c;最近几年版本彪的比较厉害&#xff0c;直接4/5/6&#xff0c;大版本之间接口有一些变化&#xff0c;特别是一些废弃接口被彻底删除了&#xff0c;…

浙大数据结构第六周之Saving James Bond - Easy Version

题目详情&#xff1a; This time let us consider the situation in the movie "Live and Let Die" in which James Bond, the worlds most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake f…

Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查

Django学习记录&#xff1a;使用ORM操作MySQL数据库并完成数据的增删改查 数据库操作 MySQL数据库pymysql Django开发操作数据库更简单&#xff0c;内部提供了ORM框架。 安装第三方模块 pip install mysqlclientORM可以做的事&#xff1a; 1、创建、修改、删除数据库中的…

【腾讯云 Cloud studio 实战训练营】搭建Next框架博客——抛开电脑性能在云端编程(沉浸式体验)

文章目录 ⭐前言⭐进入cloud studio工作区指引&#x1f496; 注册coding账号&#x1f496; 选择cloud studio&#x1f496; cloud studio选择next.js&#x1f496; 安装react的ui框架&#xff08;tDesign&#xff09;&#x1f496; 安装axios&#x1f496; 代理请求跨域&#x…

动态爬虫IP与反爬虫技术的博弈:揭秘真实反爬虫事例引发的思考

作为一名长期从事爬虫行业动态IP解决方案服务商&#xff0c;我们深知动态IP代理在抗击反爬虫方面的重要性。在当今数字化时代&#xff0c;互联网数据的爆炸性增长让数据采集变得前所未有的重要。然而&#xff0c;随着数据价值的不断提升&#xff0c;反爬虫技术也日益增强&#…

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)

说明&#xff1a;请先自行安装好docker再来看本篇文章&#xff0c;本篇文章主要实现通过使用docker部署mysql实现读写分离&#xff0c;并连接数据库测试。第二篇将实现使用Shardingjdbc实现springboot的读写分离实现。 基于Docker去创建Mysql的主从架构 #创建主从数据库文件夹…

Ubuntu 20.04 系统或图像界面卡死或完全无响应处理方法

Ubuntu 20.04 系统或图像界面卡死或完全无响应处理方法 问题背景无需重启方法安全重启方法 问题背景 Ubuntu 20.04在安装驱动程序时系统突然无响应&#xff0c;终端也无法运行&#xff1b;考虑到尽量不破坏系统&#xff0c;不希望强制上下电重启机器&#xff0c;以免损坏文件系…

版本控制和团队协作:前端工程化的关键要素

文章目录 版本控制系统介绍&#xff08;如 Git&#xff09;1. 分布式系统2. 分支管理3. 版本控制4. 快速和高效5. 社区和生态系统 分支管理和团队协作流程1. 主分支2. 功能分支3. 开发工作4. 合并到develop5. 发布准备6. 发布 持续集成与持续部署实践持续集成&#xff08;CI&am…

【前端知识】React 基础巩固(三十七)——自定义connect高阶组件

React 基础巩固(三十七)——自定义connect高阶组件 一、手撸一个自定义connect高阶组件 import { PureComponent } from "react"; import store from "../store";/*** connect的参数&#xff1a;* 参数一&#xff1a; 函数* 参数二&#xff1a; 函数* 返…

lc1074.元素和为目标值的子矩阵数量

创建二维前缀和数组 两个for循环&#xff0c;外循环表示子矩阵的左上角&#xff08;x1,y1&#xff09;&#xff0c;内循环表示子矩阵的右下角&#xff08;x2,y2&#xff09; 两个for循环遍历&#xff0c;计算子矩阵的元素总和 四个变量&#xff0c;暴力破解的时间复杂度为O(…

ChatGPT安全技术

前言 近期&#xff0c;Twitter 博主 lauriewired 声称他发现了一种新的 ChatGPT"越狱"技术&#xff0c;可以绕过 OpenAI 的审查过滤系统&#xff0c;让 ChatGPT 干坏事&#xff0c;如生成勒索软件、键盘记录器等恶意软件。 他利用了人脑的一种"Typoglycemia&q…

MySQL 5.7版本不支持ROW_NUMBER()函数

MySQL 5.7版本不支持ROW_NUMBER()函数。但是&#xff0c;你可以使用变量来手动实现这个功能。以下是一个示例查询语句&#xff1a; SELECT row_number:row_number1 AS row_num,column1, column2, ... FROM (SELECT row_number:0) AS t,your_table ORDER BY column1;在这个语句…

web3行业有哪些职业发展路径?

Web3 是一个相对较新的概念&#xff0c;因此其职业发展路径也在不断演变。一般来说&#xff0c;Web3 职业发展路径可以分为以下几个方向&#xff1a; 区块链开发工程师&#xff1a;区块链开发工程师需要掌握 Solidity 等语言和智能合约开发技能&#xff0c;负责开发和维护区块…

Vue.js2+Cesium 四、模型对比

Vue.js2Cesium 四、模型对比 Cesium 版本 1.103.0&#xff0c;低版本 Cesium 不支持 Compare 对比功能。 Demo 同一区域的两套模型&#xff0c;实现对比功能 <template><div style"width: 100%; height: 100%;"><divid"cesium-container"…

MTK联发科安卓核心板MT8385(Genio 500)规格参数资料_性能介绍

简介 MT8385安卓核心板 是一个高度集成且功能强大的物联网平台&#xff0c;具有以下主要特性&#xff1a; l 四核 Arm Cortex-A73 处理器 l 四核Arm Cortex-A53处理器 l Arm Mali™-G72 MP3 3D 图形加速器 (GPU)&#xff0c;带有 Vulkan 1.0、OpenGL ES 3.2 和 OpenCL™ 2.x …

tinyproxy搭建http代理

安装tinyproxy yum install tinyproxy 修改配置 vim /etc/tinyproxy/tinyproxy.conf # 允许任意ip访问 Allow 0.0.0.0/0 # 指定端口 ​​​​​​​Port 8888 常用配置 User nobody Group nobody# 绑定监听端口号 Port 8608 # 监听的网络接口 默认会监听所有的接口 #Liste…

Linux中的file命令:查看文件类型

2023年8月1日&#xff0c;周二上午 目录 简要说明使用方法MIME类型举例说明 简要说明 在Linux中&#xff0c;file命令用于识别文件类型。 file命令可以识别各种类型的文件&#xff0c;包括普通文件、目录、符号链接、设备文件、压缩文件、二进制可执行文件等。 它是一个非常…

云原生势不可挡,如何跳离云原生深水区?

云原生是云计算领域一大热词&#xff0c;伴随云原生概念而来的是数字产业迎来井喷、数字变革来临、数字化得以破局以及新一波的技术红利等等。云原生即“云”原生&#xff0c;顾名思义是让“应用”最大程度地利用云的能力&#xff0c;发挥云价值的最佳路径。具体来说&#xff0…

抄写Linux源码(Day2:构建调试环境)

我们计划把操作系统运行在 qemu-system-x86_64 上&#xff0c;使用 gdb 调试 经过 RTFM&#xff0c;可以使用 qemu-system-x86_64 -s -S 让 qemu 在启动之后停住 接着在另一个窗口运行 gdb&#xff0c;输入命令 target remote localhost:1234&#xff0c;即可连接qemu并调试运…