首页 > 其他分享 >不同方法合并文件时间测试

不同方法合并文件时间测试

时间:2023-01-16 10:47:26浏览次数:56  
标签:文件 fns tu 合并 cat print 测试 time test

名称

含义

用时(s)

写文件总用时(s)

单核写入全文

 

146

146

多核并行写入多(6)部分

 

101

 

cat合并

linux cat命令

173

274

python shutil

用python shutil包的copyfileobj函数拷贝文件

123

224

python 单线程读写(plain)

用python open函数读取再写入的方式拷贝文件(模式为'wb')

122

223

cat的时间可能不标准,实际上cat应该略快于python合并,因为测试在HPC上,NAS盘延迟比较高,所以调用cat这类系统命令时会有一定延迟。

总结

多进程写入速度不如单线程写入。

代码

import os
import shutil
import time
from multiprocessing import Process


def gen_test_files(fn):
    open(fn, 'w').write('q'*3*10**8)


def gen_files():


    t0 = time.time()
    ps = []
    for i in range(num):
        ps.append(Process(target=gen_test_files, args=(fns[i], ), daemon=True))
    for i in ps:
        i.start()
    for i in ps:
        i.join()
    tu1 = time.time() - t0
    print("多进程写文件用时:", tu1)

    # 生成完整文件
    ftotal = 'total.txt'
    t1 = time.time()
    open(ftotal, 'w').write('q'*3*10**8*num)
    tu2 = time.time() - t1
    print('生成全文,用时:', tu2)
    return tu1, tu2


def test_cat(fns):
    fn = 'test_cat.txt'
    cmd = f'cat {" ".join(fns)} > {fn}'
    t1 = time.time()
    os.system(cmd)
    tu = time.time() - t1
    print('cat用时:', tu)
    return tu

def test_shutil(fns):
    fn = 'test_shutil.txt'
    t1 = time.time()
    f = open(fn, 'wb')
    for i in fns:
        shutil.copyfileobj(open(i, 'rb'), f)
    f.close()
    tu = time.time() - t1
    print('shutil 用时: ', tu)
    return tu

def test_plain(fns):
    fn = 'test_plain.txt'
    t1 = time.time()
    f = open(fn, 'wb')
    for i in fns:
        f.write(open(i, 'rb').read())
    f.close()
    tu = time.time() - t1
    print('plain 用时:', tu)
    return tu


def test():
    tms = {'multi': (gen_files())[0], 'total': (gen_files())[1], 'cat': test_cat(fns), 'shutil': test_shutil(fns),
           'plain': test_plain(fns)}
    return tms


def test20():
    ts = {}
    for i in range(20):
        tms = test()
        for i in tms:
            ts[i] = ts.get(i, 0.0) + tms[i]
    print('总结:')
    for i in ts:
        print(i+'\t'+str(ts[i]))


if __name__ == '__main__':
    num = 6
    fns = [(str(index)+'.txt') for index in range(num)]
    # print('测试开始')
    # print('测试结束')
    test20()
View Code

 

测试: python test_cat_files.py(准备至少9G磁盘空间)

 

标签:文件,fns,tu,合并,cat,print,测试,time,test
From: https://www.cnblogs.com/roundfish/p/17054840.html

相关文章

  • 亚马逊上架打火机UL147测试标准
    最近很多客户过来咨询,亚马逊上有人投诉产品安全问题,亚马逊要求提供UL报告,怎么办?特别是安全电气类产品,很多卖家不约而同的提出同样的问题。不要着急,我司已经处理过很多类似产......
  • 如何动态修改属性文件×××.properties的某些内容
    我们在项目中可以把一些属性配置到×××.properties中,比如数据库连接信息。现在问题来了,我的属性文件中有一些值是需要根据后台得到的数据来动态改变的,请问这个要怎么实现......
  • web 以上超大文件上传和断点续传服务器的实现
    ​前言一、SpringMVC简介1.1、SpringMVC引言为了使Spring有可插入的MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而在使用Spring进行WEB开发时可以......
  • 小白必看!用JMeter+ANT进行接口自动化测试,并生成HTML测试报告
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 小伙......
  • [VS Code] 解决JSON文件注释提示Comments are not permitted in JSON.
    问题:打开JSON文件,发现注释中出现一堆问题提示,鼠标指示上去提示CommentsarenotpermittedinJSON.  解决:1.点击右下角的JSON. 2.输入json,找到jsonc并点击......
  • 从多个文件中搜索需要的文件
    目的:从多个文件中筛选包含某个字符串的文件importosfromshutilimportcopy#获取所有后缀为.log的文件defgetAllFiles(targetDir):files=[]listFile......
  • BUUCTF 文件中的秘密
    小明经常喜欢在文件中藏一些秘密。时间久了便忘记了,你能帮小明找到该文件中的秘密吗?注意:得到的flag请包上flag{}提交 这题真的震惊我一百年!!!我真的会谢,直接查看属......
  • springboot之json/yml配置文件的读取
    配置文件读取项目根目录的config目录下person.yml,文件夹如下person:name:qinjiangage:3happy:falsebirth:2000/01/01maps:{k1:v1,k2:v2}lis......
  • 软件测试用例设计方法及设计规范
      第三章软件测试用例设计方法及设计规范1.测试用例的定义 测试用例(Testcase)是为了实施测试而向被测试的系统提供的一组合集 测试点测试场景 集合包括: 测试环境/......
  • gtest测试用例打印台内容重定向
    需求描述在使用gtest做测试时,有时候需要记录测试过程中,测试对象运行时打印在控制台的相关内容,并根据打印的内容做校验,判断用例是否通过。由于测试用例很多,我们希望能够......