Python多处理不';我不能完成所有的任务

Python多处理不';我不能完成所有的任务,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我有很多文件需要一些软件来处理。它们不需要按顺序处理。 假设我有12个文件,并将它们划分为三个列表,然后尝试将这些列表发送到要执行的不同进程: # import all files files = glob.glob(src_path + "*.fits") files_list = [files[0::3], files[1::3], files[2::3]] num_processors = 3 # Create a pool of processors p = Po

我有很多文件需要一些软件来处理。它们不需要按顺序处理。
假设我有12个文件,并将它们划分为三个列表,然后尝试将这些列表发送到要执行的不同进程:

# import all files
files = glob.glob(src_path + "*.fits")
files_list = [files[0::3], files[1::3], files[2::3]]

num_processors = 3  # Create a pool of processors
p = Pool(processes = num_processors)  # get them to work in parallel
output = pool.map(run2, [f for f in files_list])


def run2(files, *args):
    for ffit in files:
        terminal_astrometry(command)

def terminal_astrometry(command):
    result = subprocess.run(command, stdout=subprocess.PIPE)
问题是,有时程序不会处理所有这些文件,即11个文件得到处理,但有一个文件没有得到处理。或其他时间,完成9次,但跳过3次。有时它确实完成了所有任务(处理所有文件)

本质上,在run2()函数中,我调用了我希望在接收到的每个文件run2()函数上并行运行的特定软件(Astrometry.net)


EDIT2:我修剪了run2()函数,因为它包含了大量与此处问题无关的计算(统计数据)(至少我认为是这样)并将其发布在此处。

您的症状听起来像是种族状况,但是,
pool.map
会在所有任务完成之前阻止主进程,因此在所有任务完成之前,代码不会超过该行。因此,我认为问题可能出在
run2
函数中-您能发布它的代码吗

编辑:我以前在答案中也有以下文本,现在问题已被编辑:


您将为每个文件调用两次
run2
——一次与池异步调用,一次在主进程中调用。根据此函数中的逻辑,这可能是您看到的异常行为的原因。

您的症状听起来像是竞争条件,但是
池。map
会在所有任务完成之前阻止主进程,因此在所有任务完成之前,代码不会超过该行。因此,我认为问题可能出在
run2
函数中-您能发布它的代码吗

编辑:我以前在答案中也有以下文本,现在问题已被编辑:


您将为每个文件调用两次
run2
——一次与池异步调用,一次在主进程中调用。根据此函数中的逻辑,这可能是您看到的奇怪行为的原因。

我在run2()函数中调用的软件正在导致问题。它试图在同一个文件中写入标准输出,这导致它无法完成所有任务。

我在run2()函数中调用的软件导致了问题。它试图在同一个文件中写入标准输出,这导致它无法完成所有任务。

您是对的。我编辑这篇文章是为了更好地解释run2的功能,你是对的。我编辑了这篇文章,以便更好地解释run2的功能