Python - make_archive zip в многопроцессорном пуле не работает должным образом - PullRequest
1 голос
/ 21 января 2020

Я хочу создать zip-архив из нескольких процессов одновременно. Когда я использовал пул из многопроцессорных. Некоторые из zip-архивов не были созданы. Кажется, что метод close не ждет завершения процессов. Ниже панели запуска процесса:

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}')

Я также пытался сделать попытку, но исключение не было выдано

1 Ответ

0 голосов
/ 22 января 2020

Я нашел ответ. У меня число процессов меньше, чем число процессов, запущенных моей для l oop. Так что, если процесс не завершил его лечение, он отменяется новым.

...