栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python学习日志——多进程和多线程实现文件多任务拷贝器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python学习日志——多进程和多线程实现文件多任务拷贝器

环境:windows
一. 多进程实现文件多任务拷贝器
需求分析

1.判断目标文件夹是否存在,如果不存在就创建,存在则不创建
2.遍历源文件夹中所有文件,并拷贝到目标文件夹
3.采用进程实现多任务,并完成拷贝

实现步骤

1.定义源文件夹所在的路径,目标文件夹所在路径
2.创建目标文件夹
3.通过os.listdir获取源目录中的文件列表
4.遍历每个文件,定义一个函数,专门实现文件拷贝
5.采用进程实现多任务,完成高并发拷贝

import os
import multiprocessing
def copy_file(file_name, source_dir, dest_dir):
    # 1 拼接源文件路径和目标文件路径
    source_path = source_dir + '\' + file_name
    dest_path = dest_dir + '\' + file_name
    # 2 打开源文件和目标文件
    with open(source_path, 'rb') as source_file:
        with open(dest_path, 'wb') as dest_file:
            # 3 循环读取源文件到目标路径
            while True:
                data = source_file.read(1024)
                if data:
                    dest_file.write(data)
                else:
                    break
if __name__ == '__main__':
    # 1 定义源文件夹和目标文件夹
    source_dir = r'C:UsersAdministratorDesktop7337428体系架构2.0'
    dest_dir= r'C:UsersAdministratorDesktop1'

    # 2.创建目标文件夹
    try:
        os.mkdir(dest_dir)
    except:
        print("目标文件夹已经存在")
    # 3.读取源文件夹的文件列表
    file_list = os.listdir(source_dir)
    # 4.遍历文件列表实现拷贝
    for file_name in file_list:
        # 5.使用多进程实现多任务拷贝
        sub_process = multiprocessing.Process(target=copy_file, args=(file_name, source_dir, dest_dir))
        sub_process.start()

二.多线程实现文件多任务拷贝器
线程与进程的使用方法除了导入的包不同外,其它几乎完全一样,此处不再赘述。

import os
import threading
def copy_file(file_name, source_dir, dest_dir):
    # 1 拼接源文件路径和目标文件路径
    source_path = source_dir + '\' + file_name
    dest_path = dest_dir + '\' + file_name
    # 2 打开源文件和目标文件
    with open(source_path, 'rb') as source_file:
        with open(dest_path, 'wb') as dest_file:
            # 3 循环读取源文件到目标路径
            while True:
                data = source_file.read(1024)
                if data:
                    dest_file.write(data)
                else:
                    break
if __name__ == '__main__':
    # 1 定义源文件夹和目标文件夹
    source_dir =r'C:UsersAdministratorDesktop7337428体系架构2.0'
    dest_dir= r'C:UsersAdministratorDesktop1'

    # 2.创建目标文件夹
    try:
        os.mkdir(dest_dir)
    except:
        print("目标文件夹已经存在")
    # 3.读取源文件夹的文件列表
    file_list = os.listdir(source_dir)
    # 4.遍历文件列表实现拷贝
    for file_name in file_list:
        # copy_file(file_name, source_dir, dest_dir)
        # 5.使用多线程实现多任务拷贝
        sub_thread = threading.Thread(target=copy_file, args=(file_name, source_dir, dest_dir))
        sub_thread.start()

注:在win环境下,书写文件路径时需在路径前面加上“r”,用来显式声明字符串不用转义,否则会发生以下报错。

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号