线程_multiprocessing实现文件夹copy器
2024-10-09 11:54:41
import multiprocessing
import os
import time
import random def copy_file(queue,file_name,source_folder_name,dest_folder_name):
f_read = open(source_folder_name+"/"+file_name,"rb")
f_write = open(source_folder_name+"/"+file_name,"wb")
while True:
time.sleep(random.random())
content = f_read.read(1024)
if content:
f_write.write(content)
else:
break
f_read.close()
f_write.close()
# 发送已经拷贝完毕的文件名字
queue.put(file_name) def main():
# 获取要复制的文件夹
source_folder_name = input("请输入要复制的文件夹名字:")
# 整理目标文件夹
dest_folder_name = source_folder_name + "副本"
# 创建目标文件夹
try:
os.mkdir(dest_folder_name)#创建文件夹
except:
pass
# 获取这个文件夹中所有的普通文件名
file_names = os.listdir(source_folder_name)
# 创建Queue
queue = multiprocessing.Manager().Queue()
# 创建线程池
pool = multiprocessing.Pool(3)
for file_name in file_names:
# 向线程池中添加任务
pool.apply_async(copy_file,args=(queue,file_name,source_folder_name,dest_folder_name))#不堵塞执行
# 主进程显示进度
pool.close() all_file_num = len(file_names)
while True:
file_name = queue.get()
if file_name in file_names:
file_names.remove(file_name) copy_rate = (all_file_num - len(file_names)) * 100 / all_file_num
print("\r%.2f...(%s)" % (copy_rate, file_name) + " " * 50, end="")
if copy_rate >= 100:
break
print() if __name__ == "__main__":
main()
2020-05-07
最新文章
- 对C++虚函数的理解
- RN的像素及布局
- Windows 下针对python脚本做一个简单的进程保护
- C++中复制构造函数与重载赋值操作符总结
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc区别
- 大数据基础Hadoop 2.x入门
- Linux 常用命令随笔(二)
- ant 小结
- ECMAScript2017之async function
- SQL Server 访问URL 调用WebServer
- phpcms 字符截取str_cut的使用
- linux下的下载之道
- C/C++UNION中包含STRUCT
- 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本
- 【刷题】BZOJ 4031 [HEOI2015]小Z的房间
- SQL自定义排序 ORDER BY
- JAVA-MyEclipse第一个实例
- 迷你MVVM框架 avalonjs 1.2.6发布
- HDU2680 Choose the best route 2017-04-12 18:47 28人阅读 评论(0) 收藏
- Dijkstra 调度场算法 Python实现 一
热门文章
- 整合Lettuce Redis
- 6.29模拟赛 (T1:李时珍的皮肤衣 T2:马大嘴的废话 T3:SSY的队列 T4:清理牛棚);
- for循环与嵌套(水仙花数与三角形的打印)
- python面试题四:Python web框架
- celery 基础教程(一):工作流程,架构以及概念
- 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比
- CMDB04 /流程梳理、cmdb总结
- Zabbix 4.0 API 实践,主机/主机群组 批量添加模板和删除模板
- Java常用类-Object类
- redis linux开机启动 (简单高效)