Python多进程/多线程实现并发文件复制操作
我正在写Python代码,想把一些大文件或文件夹从桌面上的一个地方复制到另一个地方(没有网络,都是本地的)。为此,我使用了shutil模块。
但是问题是,这个复制过程花费的时间太长了,所以我想加快这个复制的速度。我尝试使用了线程和多进程模块。但让我惊讶的是,这两者的速度都比顺序执行的代码还要慢。
还有一个观察是:随着进程数量的增加,复制相同数量文件夹所需的时间也在增加。我的意思是,假设我有以下的目录结构:
/a/a1, /a/a2, /b/b1 and /b/b2
如果我创建两个进程来复制文件夹a和b,假设花费2分钟。现在如果我创建四个进程来复制文件夹a/a1、a/a2、b/b1和b/b2,结果大约需要4分钟。我只在多进程中尝试过这个,不确定线程的情况。
我不太明白这是怎么回事。有没有人遇到过类似的问题?你们能分享一些在Python中使用多进程/线程的最佳实践吗?
谢谢,
Abhijit
1 个回答
8
你的问题可能是因为输入输出(IO)速度慢,所以单纯增加计算的并行处理并没有什么帮助。正如你所看到的,现在你可能让问题变得更糟,因为IO请求需要在不同的线程或进程之间来回跳动。实际上,计算机上数据移动的速度是有一定限制的,尤其是涉及到硬盘的时候。