python多线程生成指定大小数量的文件

python多线程生成文件,线程数21

生成时间与电脑性能有关

公司i7本(具体型号忘了),10万1k文件可以10秒内生成

如果是单个大文件,生成速度不会有提高,这里指针对数量比较多的文件

文件内容是一些随机数据

复制代码
# -*- coding:utf-8 -*-

import os
import random
import time
import threading

'''
默认最小生成1M文件,修改代码38行的1024,可改变最小值
'''


# 获取生成文件的数量,大小
def num_size():
    file_num = int(input('输入生成文件的数量'))
    file_size = int(input('请输入生成文件的大小'))
    return file_num, file_size


# 对生成文件数量进行分割
def segmentation_num(file_num):
    num1 = int(file_num / 20)
    num2 = num1 * 2
    num3 = num1 * 3
    num4 = num1 * 4
    num5 = num1 * 5
    num6 = num1 * 6
    num7 = num1 * 7
    num8 = num1 * 8
    num9 = num1 * 9
    num10 = num1 * 10
    num11 = num1 * 11
    num12 = num1 * 12
    num13 = num1 * 13
    num14 = num1 * 14
    num15 = num1 * 15
    num16 = num1 * 16
    num17 = num1 * 17
    num18 = num1 * 18
    num19 = num1 * 19
    num20 = num1 * 20
    return num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11, num12, num13, num14, num15, num16, num17, num18, num19, num20


# 获取路径,生成文件夹
def path_file(file_num, file_size):
    file_path = input('输入生成文件的路径')
    while True:
        if os.path.exists(file_path):
            print('"{0}"路径获取成功'.format(file_path))
            break
        else:
            file_path = input('重新输入路径')
    os.mkdir(os.path.join(file_path, '%d_%d' % (file_num, file_size)))
    return file_path


# 生成文件
def creat_file(file_path, num1, num2, file_size):
    for i in range(num1, num2):
        i = str(i)
        f = open(os.path.join(file_path, '%d_%d' % (file_num, file_size), i), 'w')
        print('生成文件%s' % i)
        for p in range(file_size):
            # 一次写入的大小,默认1M
            for j in range(1024):
                try:
                    f.write('0%s' % random.randint(0, 9) * 512)
                except KeyboardInterrupt:
                    print('\n异常中断:KeyboardInterrupt')
                    f.close()
                    exit(-1)


if __name__ == '__main__':
    file_num, file_size = num_size()
    file_path = path_file(file_num, file_size)
    num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11, num12, num13, num14, num15, num16, num17, num18, num19, num20 = segmentation_num(file_num)
    task1 = threading.Thread(target=creat_file, args=(file_path, 0, num1, file_size))
    task2 = threading.Thread(target=creat_file, args=(file_path, num1, num2, file_size))
    task3 = threading.Thread(target=creat_file, args=(file_path, num2, num3, file_size))
    task4 = threading.Thread(target=creat_file, args=(file_path, num3, num4, file_size))
    task5 = threading.Thread(target=creat_file, args=(file_path, num4, num5, file_size))
    task6 = threading.Thread(target=creat_file, args=(file_path, num5, num6, file_size))
    task7 = threading.Thread(target=creat_file, args=(file_path, num6, num7, file_size))
    task8 = threading.Thread(target=creat_file, args=(file_path, num7, num8, file_size))
    task9 = threading.Thread(target=creat_file, args=(file_path, num8, num9, file_size))
    task10 = threading.Thread(target=creat_file, args=(file_path, num9, num10, file_size))
    task11 = threading.Thread(target=creat_file, args=(file_path, num10, num11, file_size))
    task12 = threading.Thread(target=creat_file, args=(file_path, num11, num12, file_size))
    task13 = threading.Thread(target=creat_file, args=(file_path, num12, num13, file_size))
    task14 = threading.Thread(target=creat_file, args=(file_path, num13, num14, file_size))
    task15 = threading.Thread(target=creat_file, args=(file_path, num14, num15, file_size))
    task16 = threading.Thread(target=creat_file, args=(file_path, num15, num16, file_size))
    task17 = threading.Thread(target=creat_file, args=(file_path, num16, num17, file_size))
    task18 = threading.Thread(target=creat_file, args=(file_path, num17, num18, file_size))
    task19 = threading.Thread(target=creat_file, args=(file_path, num18, num19, file_size))
    task20 = threading.Thread(target=creat_file, args=(file_path, num19, num20, file_size))
    task21 = threading.Thread(target=creat_file, args=(file_path, num20, file_num, file_size))
    task1.start()
    task2.start()
    task3.start()
    task4.start()
    task5.start()
    task6.start()
    task7.start()
    task8.start()
    task9.start()
    task10.start()
    task11.start()
    task12.start()
    task13.start()
    task14.start()
    task15.start()
    task16.start()
    task17.start()
    task18.start()
    task19.start()
    task20.start()
    task21.start()
复制代码

应该有简化的写法,不过我也刚学python懂的不多,现在这个脚本够我测试用了

准备优化的方向

①对生成文件数量进行分割函数segmentation_num()原本里我像使用循环生成变量,然后再赋值,
准备使用load_iris()这个函数,可是一放到segmentation_num()里就报错,说找不到变量,暂时没解
②也可以在调用
threading.Thread()做一个循环嵌套,但是生成文件数量就会和线程数挂钩,还在想办法
之后有空再改改
posted @   西西弗神话  阅读(325)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示