用python写的一个多进程之间的文件拷贝程序:
版本1
import os
import multiprocessing
def copy_file(file_name,old_folder_name,new_folder_name):
print("模拟考别文件%s到新文件%s,文件名是%s" % (old_folder_name,new_folder_name,file_name))
old_f=open(old_folder_name+"/"+file_name,"rb")
content=old_f.read()
old_f.close()
new_f=open(new_folder_name+"/"+file_name,"wb")
new_f.write(content)
new_f.close()
def main():
old_folder_name=input("请输入要拷贝的文件夹名称")
try:
new_foler_name=old_folder_name+"[复制文件夹]"
os.mkdir(new_foler_name)
except:
pass
file_names=os.listdir(old_folder_name)
print(file_names)
po=multiprocessing.Pool(5)
for file_name in file_names:
po.apply_async(copy_file,args=(file_name,old_folder_name,new_foler_name,))
po.close()
po.join()
if __name__ == '__main__':
main()
版本2
import os
import multiprocessing
def copy_file(q,file_name,old_folder_name,new_folder_name):
old_f=open(old_folder_name+"/"+file_name,"rb")
content=old_f.read()
old_f.close()
new_f=open(new_folder_name+"/"+file_name,"wb")
new_f.write(content)
new_f.close()
q.put(file_name)
def main():
old_folder_name=input("请输入要拷贝的文件夹名称")
try:
new_foler_name=old_folder_name+"[复制文件夹]"
os.mkdir(new_foler_name)
except:
pass
file_names=os.listdir(old_folder_name)
print(file_names)
po=multiprocessing.Pool(5)
q=multiprocessing.Manager().Queue()
for file_name in file_names:
po.apply_async(copy_file,args=(q,file_name,old_folder_name,new_foler_name,))
po.close()
all_file_nums=len(file_names)
copy_num=0
while True:
file_name=q.get()
copy_num+=1
print("\r拷贝的进度为%.2f %%" %((copy_num)*100/all_file_nums),end="")
if copy_num>=all_file_nums:
break
print()
if __name__ == '__main__':
main()