python 如何在多线程或处理器中执行文件复制?
How to perform file copying in multiple threads or processor in python?
我正在尝试在 python 中复制文件,在顺序方法中需要很长时间,所以我想在多个线程中进行。下面是我在顺序中复制文件的代码
for file in files:
shutil.copy(file,destination_path)
这需要大约 1.2 秒才能完成
我尝试如下实现多线程
import multiprocessing
copy_instance(src,dest):
shutil.copy(src,dest)
for file in files:
p1 = multiprocessing.process(target=copy_instance,args=(file,destination_path)
p1.start()
这需要 168.8 秒才能完成
在多处理中执行此操作比顺序方法花费更多时间,我做错了什么?我怎样才能正确地实现多线程来加速我的复制过程?对此的任何帮助或建议都会非常有帮助,谢谢
生成新进程很慢,尤其是在 windows 中。你应该使用多线程而不是多线程,这在 CPython 中对 I/O 有好处( 是 对 CPU 绑定进程不利):
import shutil
import itertools
from concurrent.futures import ThreadPoolExecutor
def copy_instance(args):
shutil.copy(*args)
# ... snipped definition of files and destination
with ThreadPoolExecutor() as pool:
pool.map(copy_instance, zip(files, itertools.repeat(destination)))
然而,如评论中所述,根据您的存储,您可能看不到任何差异。
我正在尝试在 python 中复制文件,在顺序方法中需要很长时间,所以我想在多个线程中进行。下面是我在顺序中复制文件的代码
for file in files:
shutil.copy(file,destination_path)
这需要大约 1.2 秒才能完成 我尝试如下实现多线程
import multiprocessing
copy_instance(src,dest):
shutil.copy(src,dest)
for file in files:
p1 = multiprocessing.process(target=copy_instance,args=(file,destination_path)
p1.start()
这需要 168.8 秒才能完成
在多处理中执行此操作比顺序方法花费更多时间,我做错了什么?我怎样才能正确地实现多线程来加速我的复制过程?对此的任何帮助或建议都会非常有帮助,谢谢
生成新进程很慢,尤其是在 windows 中。你应该使用多线程而不是多线程,这在 CPython 中对 I/O 有好处( 是 对 CPU 绑定进程不利):
import shutil
import itertools
from concurrent.futures import ThreadPoolExecutor
def copy_instance(args):
shutil.copy(*args)
# ... snipped definition of files and destination
with ThreadPoolExecutor() as pool:
pool.map(copy_instance, zip(files, itertools.repeat(destination)))
然而,如评论中所述,根据您的存储,您可能看不到任何差异。