python - Python - 多进程池中的 make_archive zip 无法正常工作
问题描述
我想同时从多个进程创建一个 zip 存档。当我从多处理中使用池时。一些 zip 存档尚未创建。似乎关闭方法不等待进程结束在进程启动器下方:
import os
import sys
import json
from multiprocessing import Pool
from shutil import copyfile, make_archive
from xml.etree.ElementTree import ElementTree
def launch_traitment(path, path_upload):
print(path)
with Pool(processes=NB_PROCESS) as pool:
for dir in os.listdir(path):
pool.apply_async(compute_dir,(dir,path,path_upload,))
pool.close()
pool.join()
...
def compute_dir(dir, path, path_upload):
working_path = path+'/'+dir
deleteAck(working_path+'/'+dir+'.ack')
execute(dir, path)
generateZIP(dir, working_path, path_upload)
...
def generateZIP(dir, working_path, path_upload):
lst_file_meta_data = dir.split('_')
if len(lst_file_meta_data) < 3:
print(f"File {dir} incorrect naming")
return 1
provider = lst_file_meta_data[0]
registration = lst_file_meta_data[1]
session_date = lst_file_meta_data[2]
zip_file = path_upload+'/'+provider+'/'+registration
if not os.path.exists(zip_file+'/'+ dir +'.zip'):
print('Génération du ZIP : ', zip_file+'/'+ dir +'.zip')
if not os.path.exists(zip_file):
os.makedirs(zip_file)
make_archive(zip_file+'/'+ dir, 'zip', working_path)
我尝试使用系统命令创建 zip,但我遇到了同样的问题:
os.system(f'zip -r -j {zip_file}/{dir}.zip {working_path}')
我也试过尝试 except 但没有抛出异常
解决方案
我找到了答案。我的进程数低于我的 for 循环启动的进程数。所以如果这个过程还没有完成他的治疗,它会被一个新的覆盖。
推荐阅读
- c# - 在 .NET Core 3.1 中追加到 Azure blob 文件的末尾,而不下载整个文件
- python - 如何使用 Selenium(-Wire) 获取 HTTP 响应代码
- javascript - 为什么在 React 中当我在导入时解构对象时我应该使用 'as' 但不能使用 ':'
- python - 有没有办法指示 pytest 跳过模块定义?
- python - 如何在不更改目录的情况下创建相对符号链接?
- ansible - 不尊重 Ansible 变量优先级
- excel-formula - 给定谷歌表格中的任务和所有者列表,如何有效地提取个人计划?
- html - 硒:改变咏叹调元素
- java - 动态编码错误 main(teste.java:38) Java
- python - 是否可以将 Spark Structured Streaming 与标准网络抓取(即 python 的响应库)一起使用?