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()做一个循环嵌套,但是生成文件数量就会和线程数挂钩,还在想办法
之后有空再改改
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix