Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使多进程池中的_存档zip无法正常工作_Python_Asynchronous_Multiprocessing_Zip_Pool - Fatal编程技术网

Python-使多进程池中的_存档zip无法正常工作

Python-使多进程池中的_存档zip无法正常工作,python,asynchronous,multiprocessing,zip,pool,Python,Asynchronous,Multiprocessing,Zip,Pool,我想同时从多个进程创建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(

我想同时从多个进程创建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)



我也尝试过尝试,但没有抛出异常。我找到了答案。我的进程数低于for循环启动的进程数。因此,如果这个过程没有完成他的治疗,就会被一个新的过程覆盖。

我找到了答案。我的进程数低于for循环启动的进程数。因此,如果进程尚未完成他的处理,它将被一个新进程覆盖。

可能需要pool.join()位于pool.close()之前?尝试在每个压缩作业的开头打印“开始”,在结尾打印“结束”。然后比较“begin”和“end”的计数。我之前已经尝试过进行连接,但它抛出了一个错误。文档中说您应该在调用join之前关闭或终止。
make_archive
的代码在哪里?我已经编辑了上一篇文章,这是一篇导入文章。请尝试在
pool.wait()
之前添加
pool.close()
。您的代码还需要来自multiprocessing.pool import ThreadPool或类似文件的
。您可能需要pool.join()放在pool.close()之前?尝试在每个压缩作业的开头打印“开始”,在结尾打印“结束”。然后比较“begin”和“end”的计数。我之前已经尝试过进行连接,但它抛出了一个错误。文档中说您应该在调用join之前关闭或终止。
make_archive
的代码在哪里?我已经编辑了上一篇文章,这是一篇导入文章。请尝试在
pool.wait()
之前添加
pool.close()
。您的代码还需要来自multiprocessing.pool import ThreadPool
或类似工具的
os.system(f'zip -r -j {zip_file}/{dir}.zip {working_path}')