我有一个程序可以把大量的文件从一个地方复制到另一个地方——我说的是100000多个文件(我现在在图像序列中复制314g)。他们都在一个巨大的,非常快的网络存储阵列上。我正在使用shutil按顺序复制文件,这需要一些时间,所以我试图找到最好的方法来实现这一点。我注意到我使用的一些软件可以有效地多线程地从网络上读取文件,从而大大提高了加载时间,所以我想尝试用python来实现这一点。在
我没有编程多线程/多处理的经验-这看起来是正确的领域继续吗?如果是这样,最好的方法是什么?我看过其他一些关于在python中复制线程文件的SO帖子,它们似乎都说没有速度上的提高,但我认为考虑到我的硬件,情况不会这样。目前我的IO容量还远远不够,资源大约占1%(我在本地有40个内核和64g RAM)。在
这可以通过在Python中使用gevent进行并行化。在
我建议使用以下逻辑来实现加速100k+文件复制:
把所有需要复制到csv文件中的100K+文件的名称,例如:输入.csv'.
然后从csv文件创建块。块的数量应根据编号计算机中的处理器/核心。
将这些块传递给单独的线程。
每个线程按顺序读取该块中的文件名并将其从一个位置复制到另一个位置。
下面是python代码片段:
将文件另存为文件_复印机.py. 打开终端并运行:
^{pr2}$更新:
我从来没有让Gevent工作(第一个答案),因为我无法安装没有互联网连接的模块,我没有在我的工作站。不过,我只需使用python的内置线程,就可以将文件复制时间减少8次(从那时起我就学会了如何使用它),我想把它作为一个额外的答案发布给感兴趣的人!下面是我的代码,可能需要注意的是,由于硬件/网络设置的不同,我的8x复制时间很可能因环境而异。在
相关问题 更多 >
编程相关推荐