Python使用多进程与进程池完成文件复制
代码原理:
- 获取源文件夹
- 判断是否存在复制目标文件夹,不存在创建目标文件夹
- 创建线程池,创建队列
- 调用copy函数,读取源文件夹文件,新建写入目标文件夹文件,并获取消耗时间
- copy函数完成任务后,向队列中存入filename
- 主进程循环读取队列中的filename,若队列为空,则copy file 完成,程序退出
代码如下:
import multiprocessing
import os,time
def copy(qu,file_name,target_file,source_dir):
global spend_time
start_time=time.time()
old_file=open(source_dir + '/' + file_name,'rb')
content=old_file.read()
old_file.close()
new_file=open(target_file + '/' + file_name,'wb')
new_file.write(content)
new_file.close()
qu.put(file_name)
end_time=time.time()
spend_time=round(end_time - start_time,5)
print(f'复制文件完成,耗时:{spend_time}s')
def main():
source_dir=input('源文件夹:')
target_file='new'+source_dir
if not os.path.exists(target_file):
os.mkdir(target_file)
else:
print('已存在文件夹')
file_names=os.listdir(source_dir)
po=multiprocessing.Pool(3)
qu=multiprocessing.Manager().Queue()
for file_name in file_names:
time.sleep(1)
po.apply_async(copy,args=(qu,file_name,target_file,source_dir))
while True:
qu.get()
if qu.empty() :
print('拷贝完成')
break
po.close()
po.join()
if __name__ == '__main__':
main()
|