Python 多处理被大量输入锁定

Python 多处理被大量输入锁定,python,multiprocessing,locking,Python,Multiprocessing,Locking,我很难理解我遇到的问题。一些背景信息:我正在处理大量加载、处理和保存的文件。虽然文件相当大,而且多处理过程中的步骤非常耗时,但它非常重复,因此根据这里的一些帖子,我编写了一种使用多处理并行运行此过程的方法。它对2-4个文件非常有效,但当我尝试运行10-20个文件时,它会以某种方式锁定。不过,有趣的是,问题显然出在最后一次估算或pool.join中,因为除了一个文件之外的所有数据都被保存了。老实说,我甚至不知道如何找出问题所在。有没有人建议我可以尝试做什么,或者问题出在哪里?这是一个MRE: #!

我很难理解我遇到的问题。一些背景信息:我正在处理大量加载、处理和保存的文件。虽然文件相当大,而且多处理过程中的步骤非常耗时,但它非常重复,因此根据这里的一些帖子,我编写了一种使用多处理并行运行此过程的方法。它对2-4个文件非常有效,但当我尝试运行10-20个文件时,它会以某种方式锁定。不过,有趣的是,问题显然出在最后一次估算或pool.join中,因为除了一个文件之外的所有数据都被保存了。老实说,我甚至不知道如何找出问题所在。有没有人建议我可以尝试做什么,或者问题出在哪里?这是一个MRE:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import multiprocessing as mp
import math
import sys
import traceback

pool = None

class ProcessData:

    def __init__(self):
        self.multiprocessing_files()

    def function_to_execute(self, foo, bar):
        # some processing of files and saving to folder
        print("Process: {}; Running for file {}; folder: {}".format(mp.current_process().name, foo, bar))

    def multiprocessing_files(self):
        data_tuple = ("x1", "y1"), ("x2", "y2"), ("x3", "z3") # input is a filename and a folder

        pool = mp.get_context("spawn").Pool(int(math.floor(mp.cpu_count() / 2)))
        for foo, bar in data_tuple:
            pool.apply_async(func=self.func_wrapper_debug,  # self.N4BiasCorrection_multiprocessing
                             args=(foo, bar), callback=self.prompt)
        pool.close()
        pool.join()


    def prompt(self, result):
        if result:
            print('\nPreprocessing finished!')
            pool.terminate()

    def func_wrapper_debug(self, foo, bar):
        try:
            self.function_to_execute(foo, bar)
        except Exception as e:
            raise Exception("".join(traceback.format_exception(*sys.exc_info())))

if __name__ == '__main__':
    ProcessData()