2011-09-09 97 views
4

我正在编写python代码以将一堆大文件/文件夹从一个位置复制到桌面上的其他位置(无网络,一切都是本地的)。我正在使用shutil模块。Python多进程/多线程用于并发文件复制操作

但问题是需要更多时间,所以我想加快这个复制过程。我尝试过使用线程和多处理模块。但令我惊讶的是,两者都比顺序代码花费更多的时间。

还有一个观察结果是 - 所需时间随着相同数量文件夹的进程数量的增加而增加。我的意思是想我有以下目录结构

     /a/a1, /a/a2, /b/b1 and /b/b2 

如果我创建2个进程来复制文件夹A和B假设2分钟时的时间。 现在如果我创建4个进程来复制文件夹a/a1,a/a2,b/b1和b/b2,大约需要4分钟。我只在多处理的时候才尝试过,不确定线程​​。

我不确定发生了什么。会有人有类似的问题吗?有什么最佳实践可以共享使用python中的多处理/线程?

感谢 作者Abhijit

+4

你的问题可能是IO限制的,所以更多的计算并行化将无济于事。正如你所看到的,现在要求IO请求在各个线程/进程之间来回跳转,可能会让问题变得更糟。对于在计算机上移动数据的速度有实际的限制,特别是涉及到磁盘的情况。 – Joe

+1

@Joe这是一个答案。把它移到一个,你有我的投票。 – agf

+0

为了让多个进程加快速度,磁盘的多个磁头必须能够独立工作。但那不是他们的工作方式。 –

回答

8

你的问题很可能是受IO的限制,让更多的计算并行化也无济于事。正如你所看到的,现在要求IO请求在各个线程/进程之间来回跳转,可能会让问题变得更糟。对于在计算机上移动数据的速度有实际的限制,特别是涉及到磁盘的情况。

+0

感谢您的回答乔。我不确定这是否是IO界限问题。但是,是的,对于给定的操作系统和硬件,在磁盘上移动数据是有实际限制的。我只是想确保我使用它的极限。我使用OS拷贝命令尝试了顺序拷贝和并行拷贝,并注意到在这两种情况下,它都需要与python顺序拷贝相同的时间。 –

+1

这是IO绑定... – fabrizioM