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的功能