利用python多线程实现拷贝文件夹的文件

简介:

import multiprocessing 

import threading

import os

import time

import random

import sys


def copy_file(queue,file_name,source_folder_name,dest_folder_name):

    #print('正在复制:%s' % file_name)

    if os.path.isdir(source_folder_name + '/' + file_name):

        queue.put(file_name)

        return

    if not os.path.exists(dest_folder_name):

        os.mkdir(dest_folder_name)

    data_file = open(source_folder_name + '/' + file_name,'rb')

    cp_file = open(dest_folder_name + '/' + file_name,'wb')

    while True:

        content = data_file.read(4096)

        if len(content) == 0:

            break

        cp_file.write(content)

    data_file.close()

    

    cp_file.close()

    #print('%s文件复制完成!' % file_name)

    queue.put(file_name)

    


def main():

    

    source_folder_name = input("请输入文件夹:")


    dest_folder_name = source_folder_name +"附件"


    file_names = os.listdir(source_folder_name)


    #创建一个队里

    queue = multiprocessing.Manager().Queue(128)

    #创建进程池

    p = multiprocessing.Pool(1)

    for file_name in file_names:

        #print('put file_name %s' % file_name)

        p.apply_async(copy_file,args=(queue,file_name,source_folder_name,dest_folder_name))

    

    

    p.close()

    #p.join()

    

    all_file_nums = len(file_names)

    while True:

        file_name = queue.get()

        if file_name in file_names:

            file_names.remove(file_name)

        copy_rate = (all_file_nums - len(file_names)) *100 /all_file_nums

        print("\r%.2f=========>(%s) (%0.2f/%0.2f)" % (copy_rate, file_name,len(file_names),all_file_nums) + " " * 50,end="")

        #\r 默认表示将输出的内容返回到第一个指针,这样的话,后面的内容会覆盖前面的内容

        #sys.stdout.flush()


        #if len(file_names) < 5:

        #    print("remaining: %s" % file_names)

        if copy_rate >= 100:

            break

    print('拷贝文件完成!')


if __name__ == "__main__":

     main()




本文转自 xxl714 51CTO博客,原文链接:http://blog.51cto.com/dreamgirl1314/1962154,如需转载请自行联系原作者
相关文章
|
3天前
|
存储 Python
一文让你搞懂 Python 的 pyc 文件
一文让你搞懂 Python 的 pyc 文件
27 15
|
4天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
13 2
|
5天前
|
人工智能 IDE 开发工具
Python实行任意文件的加密—解密
Python实行任意文件的加密—解密
11 1
|
3天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
10 0
|
4天前
|
并行计算 关系型数据库 MySQL
30天拿下Python之使用多线程
30天拿下Python之使用多线程
12 0
|
4天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
10 0
|
5天前
|
数据处理 Python
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
|
2月前
|
存储 监控 Java
Java多线程优化:提高线程池性能的技巧与实践
Java多线程优化:提高线程池性能的技巧与实践
64 1
|
4天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
12天前
|
Java Spring
spring多线程实现+合理设置最大线程数和核心线程数
本文介绍了手动设置线程池时的最大线程数和核心线程数配置方法,建议根据CPU核数及程序类型(CPU密集型或IO密集型)来合理设定。对于IO密集型,核心线程数设为CPU核数的两倍;CPU密集型则设为CPU核数加一。此外,还讨论了`maxPoolSize`、`keepAliveTime`、`allowCoreThreadTimeout`和`queueCapacity`等参数的设置策略,以确保线程池高效稳定运行。
69 10
spring多线程实现+合理设置最大线程数和核心线程数
下一篇
无影云桌面