【python3】 多线程以及多进程拷贝U盘图片数据
【python3】 多线程以及多进程拷贝U盘图片数据
- 1.背景
- 2.代码
- 3.运行结果及分析
1.背景
在做深度学习的时候,需要手动拷贝很多图片数据,发现U盘质量很差劲,拷贝非常耗时间,如下图:
于是想用python代码去解决速度慢的事情,希望得到大的提升。
2.代码
python多线程/多进程拷贝U盘图片,代码如下:
可以通过test_handle 设置来测试:
"multi_process"多进程运行,开了10个进程,其实电脑6核,开6个就够了;
"multi_thread"多线程,开了10个线程;
“one_way”:一个一个拷贝;
代码只是简单的测试可行性,请多多包涵~。
import os
import shutil
from threading import Thread
from multiprocessing import Processdef move_files_oneWay(src_path,dst_path):'''实现文件的移动(剪切)功能,一个一个的移动:param src_path:源(来源)图片的文件夹路径:param dst_path:目标(移动到的位置)文件路径:return:None'''files = os.listdir(src_path)for file in files:file_path = os.path.join(src_path,file)shutil.move(file_path,dst_path)def move_files_multiWay(src_path,src_filesList,dst_path):'''实现文件的移动(剪切)功能,多线程进行:param src_path:源(来源)图片的文件夹路径:param src_filesList:源图片名称列表,如[000317.jpg,000318.jpg]:param dst_path:目标(移动到的位置)文件路径:return:None'''for file in src_filesList:file_path = os.path.join(src_path,file)try:shutil.move(file_path,dst_path)except Exception as e:pass
if __name__=="__main__":# test_handle="one_way"# test_handle = "multi_thread"test_handle = "multi_process"file_path = r"F:\Voc2007Data\VOCdevkit\VOC2007\JPEGImages"dst_path = r"C:\Users\G7\Desktop\神经网络训练\ssd_tf2\ssd-tf2-master\VOCdevkit\VOC2007\JPEGImages"if test_handle=="one_way":move_files_oneByone(file_path, dst_path)elif test_handle == "multi_thread":#例如开启10个线程filesList = os.listdir(file_path) #文件列表gap=len(filesList)//10 #文件等分数量list_gap=[]for i in range(9):start_point=i*gaplist_gap.append(filesList[start_point:gap])list_gap.append(filesList[gap*9:-1])#开启多线程t1 = Thread(target=move_files_multiWay, args=(file_path,list_gap[0],dst_path))t2 = Thread(target=move_files_multiWay, args=(file_path, list_gap[1], dst_path))t3 = Thread(target=move_files_multiWay, args=(file_path, list_gap[2], dst_path))t4 = Thread(target=move_files_multiWay, args=(file_path,list_gap[3],dst_path))t5 = Thread(target=move_files_multiWay, args=(file_path, list_gap[4], dst_path))t6 = Thread(target=move_files_multiWay, args=(file_path, list_gap[5], dst_path))t7 = Thread(target=move_files_multiWay, args=(file_path, list_gap[6], dst_path))t8 = Thread(target=move_files_multiWay, args=(file_path, list_gap[7], dst_path))t9 = Thread(target=move_files_multiWay, args=(file_path, list_gap[8], dst_path))t10 = Thread(target=move_files_multiWay, args=(file_path, list_gap[9], dst_path))t1.start()t2.start()t3.start()t4.start()t5.start()t6.start()t7.start()t8.start()t9.start()t10.start()elif test_handle == "multi_process":# 例如开启10个线程filesList = os.listdir(file_path) # 文件列表gap = len(filesList) // 10 # 文件等分数量list_gap = []for i in range(9):start_point = i * gaplist_gap.append(filesList[start_point:gap])list_gap.append(filesList[gap * 9:-1])# 开启多线程t1 = Process(target=move_files_multiWay, args=(file_path, list_gap[0], dst_path))t2 = Process(target=move_files_multiWay, args=(file_path, list_gap[1], dst_path))t3 = Process(target=move_files_multiWay, args=(file_path, list_gap[2], dst_path))t4 = Process(target=move_files_multiWay, args=(file_path, list_gap[3], dst_path))t5 = Process(target=move_files_multiWay, args=(file_path, list_gap[4], dst_path))t6 = Process(target=move_files_multiWay, args=(file_path, list_gap[5], dst_path))t7 = Process(target=move_files_multiWay, args=(file_path, list_gap[6], dst_path))t8 = Process(target=move_files_multiWay, args=(file_path, list_gap[7], dst_path))t9 = Process(target=move_files_multiWay, args=(file_path, list_gap[8], dst_path))t10 = Process(target=move_files_multiWay, args=(file_path, list_gap[9], dst_path))t1.start()t2.start()t3.start()t4.start()t5.start()t6.start()t7.start()t8.start()t9.start()t10.start()
3.运行结果及分析
多线程下的状态
多进程状态下移动图片文件
可以看到多进程稍微要快一点,但是依然非常的蜗牛的慢!
请求速度已经满负荷了,U盘的读写速度实在是太受限了。
思考:
以后可以采取C/C++语言去实现读写,也许速度可以快很多!
采用windows的批处理去处理这种任务,也许速可以快很多!
【python3】 多线程以及多进程拷贝U盘图片数据相关推荐
- python3多线程和多进程_Python3 多线程、多进程
python中的线程是假线程,不同线程之间的切换是需要耗费资源的,因为需要存储线程的上下文,不断的切换就会耗费资源.. python多线程适合io操作密集型的任务(如socket server 网络并 ...
- 基于python3.6的OpenCV读取并打印图片数据
** 在python中能够较为容易的显示出图片的宽.高.通道数.像素等. ** 具体代码如下: import cv2 as cvdef get_image_info(image):print(type ...
- python 多进程_说说Python多线程与多进程的区别?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...
- 太好了!终于梳理清楚Python多线程与多进程!
作者丨钱魏Way 来源 https://www.biaodianfu.com/python-multi-thread-and-multi-process.html 大家好,我是菜鸟哥. 在学习Pyth ...
- 多线程和多进程的差别(小结)
非常想写点关于多进程和多线程的东西,我确实非常爱他们.可是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手. 今天最终下了决心,写点东西,以后能够再修修补补也无妨. 一.为何须要多进程( ...
- python多线程和多进程的使用_python多线程与多进程
python多线程与多进程 python多线程 python中提供两个标准库thread和threading用于对线程的支持,python3中已放弃对前者的支持,后者是一种更高层次封装的线程库,接下来 ...
- gj11 多线程、多进程和线程池编程
11.1 python中的GIL # coding=utf-8 # gil global interpreter lock (cpython) # python中一个线程对应于c语言中的一个线程 # ...
- 协程(Coroutine)与多线程,多进程
执行多个任务可以使用多线程或多进程. 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响 多线程中,所有变量都由所有线程共享.而线程间的切换是系统进行调度,无法控制,所以可能 一个进程中的 ...
- 【进阶】 --- 多线程、多进程、异步IO实用例子
[进阶] --- 多线程.多进程.异步IO实用例子:https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发(串行.多线程. ...
最新文章
- 学习笔记Flink(四)—— Flink基础API及核心数据结构
- python获取文件夹下文件_Python获取目录下的所有文件
- javascript --- 自定义数组的反序函数
- 【渝粤教育】国家开放大学2018年秋季 1320T关系营销 参考试题
- Redis PHP连接操作
- arcgis 字段计算器 条件赋值_ArcGIS中属性表的常用操作汇总
- svn: E180001: Unable to open an ra_local session to URL问题解决方案
- clickhouse的常见问题以及和mysql相关特性对比
- C语言课后习题(53)
- Java并发(二)——ThreadLocal
- python二叉树遍历例子_python数据结构之二叉树的遍历实例
- SpringCloud教程
- 作为一名优秀的程序员,如何得体地辞职
- 自动量程万用表的实现原理_自动量程万用表各个按钮的含义?
- es 创建索引 指定id_elasticsearch创建索引
- 网上查信用报告,什么是数字证书验证?
- 暂存分支 Git stash
- linux 启动 参数,Linux启动参数
- arndale octa开发板编译u-boot和kernel
- Linux下poky编译2
热门文章
- 同一服务器下网站互相友链,如何区分2898平台的友链套餐、单个链接和首页以及全站呢?...
- 人员离职it检查_it员工辞职申请书
- 用SQL看博客、新闻
- SpringBoot中多数据源的配置
- 玩转CANN目标检测与识别一站式方案【介绍篇】
- python安装dill_Python dill
- Arduino UNO R3上的AREF和IOREF管脚
- 计算机网络技术--电子邮件
- 抖音解析后保存不了,新浪看点秒拍凤凰号修改md5,批量下载去重消重伪原创火山上热门时间,今日头条修改m...
- java手机号码中奖查询,Java实现查询手机号码被标记功能