这是一个工作代码,它利用多处理和子进程的 popen() 将文件从源复制到目标。
import os, sys, subprocess
from multiprocessing import Pool
def copyUsingSubprocess(source):
folder=os.path.dirname(source)
srcFileName, srcFileExt=os.path.splitext(os.path.basename(source))
destFilename=srcFileName+'_dest'+srcFileExt
dest='/'.join([folder,destFilename])
cmd=['cp', source, dest]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sources = ['/Volumes/files/a.data','/Volumes/files/b.data',
'/Volumes/files/c.data','/Volumes/files/d.data',
'/Volumes/files/e.data','/Volumes/files/f.data']
pool = Pool(20)
results = pool.map(copyUsingSubprocess, sources)
下面是类似的代码。它也使用 subprocess.popen() 来执行文件复制。但它无需调用多处理的 Pool.map() 方法即可完成。
import os, sys, subprocess
def copyUsingSubprocess(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sources = ['/Volumes/files/a.data','/Volumes/files/b.data',
'/Volumes/files/c.data','/Volumes/files/d.data',
'/Volumes/files/e.data','/Volumes/files/f.data']
for source in sources:
folder=os.path.dirname(source)
srcFileName, srcFileExt=os.path.splitext(os.path.basename(source))
destFilename=srcFileName+'_dest'+srcFileExt
dest='/'.join([folder,destFilename])
cmd=['cp', source, dest]
copyUsingSubprocess(cmd)