首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有更有效的方法来实现这个功能?

是否有更有效的方法来实现这个功能?
EN

Stack Overflow用户
提问于 2022-08-24 14:35:40
回答 2查看 56关注 0票数 1

此函数根据文件类型将文件从一个文件夹复制到另一个文件夹。问题是当文件数量太大以至于复制时间太长时。也许还有别的方法可以做到?使用另一个库/语言/语法?

代码语言:javascript
运行
复制
def main_copy(source, destination):

    # List of all files inside directory
    files_fullpath = [f for f in listdir(source) 
                        if isfile(join(source, f))] 

    # Copy files to the correct folder according to filetype
    if len(files_fullpath) != 0:
        for fs in files_fullpath:
            full_file = source + "\\" + fs
            if str(fs).endswith('.ARW'):
                shutil.copy(full_file, raw_folder + "\\" + fs)
            else:
                shutil.copy(full_file, jpg_folder + "\\" + fs)
        if len(listdir(destination)) != 0:
            print("Files moved succesfully!")
EN

回答 2

Stack Overflow用户

发布于 2022-08-24 14:43:42

您可以尝试使用threadingmultiprocessing来加速复制。我建议将concurrent.futures模块与ThreadPoolExecutorProcessPoolExecutor结合使用。

票数 0
EN

Stack Overflow用户

发布于 2022-08-24 14:54:37

加速您的过程的一个好主意是将计算并行化到最大的磁盘写入速度。

您可以使用多处理库并决定是使用多线程(multiprocessing.pool.ThreadPool)池还是使用多处理(multiprocessing.Pool)。

我将向您展示一个使用多线程的示例,但多处理也可能是一个很好的选择(取决于许多因素)。

代码语言:javascript
运行
复制
import os
import glob
import shutil
from functools import partial
from multiprocessing.pool import ThreadPool

def multi_copy(source, destination, n=8):
    # copy_to_mydir will copy any file you give it to destination dir
    copy_to_mydir = partial(shutil.copy, dst=destination)

    # list of files we want to copy
    to_copy = glob.glob(os.path.join(source, '*'))

    with ThreadPool(n) as p:
        p.map(copy_to_mydir, to_copy)

注意:如果您想深入了解多线程与多线程之间的关系,可以阅读这个漂亮的帖子

注1:这个问题的瓶颈应该是写到磁盘。这取决于您正在运行代码的机器,可能在某些机器上您不会得到任何好处,因为一个进程可以饱和写到磁盘的容量。在许多情况下,以并行方式写入磁盘可能是有利的。

备注2: --当您有许多小文件时,应该获得并行编写的最大好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73475061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档