【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盘图片数据相关推荐

  1. python3多线程和多进程_Python3 多线程、多进程

    python中的线程是假线程,不同线程之间的切换是需要耗费资源的,因为需要存储线程的上下文,不断的切换就会耗费资源.. python多线程适合io操作密集型的任务(如socket server 网络并 ...

  2. 基于python3.6的OpenCV读取并打印图片数据

    ** 在python中能够较为容易的显示出图片的宽.高.通道数.像素等. ** 具体代码如下: import cv2 as cvdef get_image_info(image):print(type ...

  3. python 多进程_说说Python多线程与多进程的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  4. 太好了!终于梳理清楚Python多线程与多进程!

    作者丨钱魏Way 来源 https://www.biaodianfu.com/python-multi-thread-and-multi-process.html 大家好,我是菜鸟哥. 在学习Pyth ...

  5. 多线程和多进程的差别(小结)

    非常想写点关于多进程和多线程的东西,我确实非常爱他们.可是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手. 今天最终下了决心,写点东西,以后能够再修修补补也无妨. 一.为何须要多进程( ...

  6. python多线程和多进程的使用_python多线程与多进程

    python多线程与多进程 python多线程 python中提供两个标准库thread和threading用于对线程的支持,python3中已放弃对前者的支持,后者是一种更高层次封装的线程库,接下来 ...

  7. gj11 多线程、多进程和线程池编程

    11.1 python中的GIL # coding=utf-8 # gil global interpreter lock (cpython) # python中一个线程对应于c语言中的一个线程 # ...

  8. 协程(Coroutine)与多线程,多进程

    执行多个任务可以使用多线程或多进程. 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响 多线程中,所有变量都由所有线程共享.而线程间的切换是系统进行调度,无法控制,所以可能 一个进程中的 ...

  9. 【进阶】 --- 多线程、多进程、异步IO实用例子

    [进阶] --- 多线程.多进程.异步IO实用例子:https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发(串行.多线程. ...

最新文章

  1. 学习笔记Flink(四)—— Flink基础API及核心数据结构
  2. python获取文件夹下文件_Python获取目录下的所有文件
  3. javascript --- 自定义数组的反序函数
  4. 【渝粤教育】国家开放大学2018年秋季 1320T关系营销 参考试题
  5. Redis PHP连接操作
  6. arcgis 字段计算器 条件赋值_ArcGIS中属性表的常用操作汇总
  7. svn: E180001: Unable to open an ra_local session to URL问题解决方案
  8. clickhouse的常见问题以及和mysql相关特性对比
  9. C语言课后习题(53)
  10. Java并发(二)——ThreadLocal
  11. python二叉树遍历例子_python数据结构之二叉树的遍历实例
  12. SpringCloud教程
  13. 作为一名优秀的程序员,如何得体地辞职
  14. 自动量程万用表的实现原理_自动量程万用表各个按钮的含义?
  15. es 创建索引 指定id_elasticsearch创建索引
  16. 网上查信用报告,什么是数字证书验证?
  17. 暂存分支 Git stash
  18. linux 启动 参数,Linux启动参数
  19. arndale octa开发板编译u-boot和kernel
  20. Linux下poky编译2

热门文章

  1. 同一服务器下网站互相友链,如何区分2898平台的友链套餐、单个链接和首页以及全站呢?...
  2. 人员离职it检查_it员工辞职申请书
  3. 用SQL看博客、新闻
  4. SpringBoot中多数据源的配置
  5. 玩转CANN目标检测与识别一站式方案【介绍篇】
  6. python安装dill_Python dill
  7. Arduino UNO R3上的AREF和IOREF管脚
  8. 计算机网络技术--电子邮件
  9. 抖音解析后保存不了,新浪看点秒拍凤凰号修改md5,批量下载去重消重伪原创火山上热门时间,今日头条修改m...
  10. java手机号码中奖查询,Java实现查询手机号码被标记功能