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