我正在尝试用多处理运行多个函数,并且遇到了一些麻烦。我想在所有进程/输入上运行一个初始函数以完成,然后在第一个函数的输出上并行运行2或3个其他函数。我已经有了搜索功能。代码在那里是为了便于解释。
我不知道如何从这里继续代码。我把我的初步尝试放在下面。我希望process1的所有实例都完成,然后process2和process3并行启动。
代码类似于:
from multiprocessing import Pool
def init(*args):
global working_dir
[working_dir] = args
def process1(InFile):
python.DoStuffWith.InFile
Output.save.in(working_dir)
def process2(queue):
inputfiles2 = []
python.searchfunction.appendOutputof.process1.to.inputfiles2
python.DoStuffWith.process1.Output
python.Output
def process3(queue):
inputfiles2 = []
python.searchfunction.appendOutputof.process1.to.inputfiles2
python.DoStuffWith.process1.Output
python.Output
def MCprocess():
working_dir = input("enter input: ")
inputfiles1 = []
python.searchfunction.appendfilesin.working_dir.to.inputfiles1
with Pool(initializer=init, initargs=[working_dir], processes=16) as pool:
pool.map(process1, inputfiles1)
pool.close()
#Editted Code
queue = multiprocessing.Queue
queue.put(working_dir)
queue.put(working_dir)
ProcessTwo = multiprocessing.Process(target=process2, args=(queue,))
ProcessThree = multiprocessing.Process(target=process3, args=(queue,))
ProcessTwo.start()
ProcessThree.start()
#OLD CODE
#with Pool(initializer=init, initargs=[working_dir], processes=16) as pool:
#pool.map_async(process2)
#pool.map_async(process3)
if __name__ == '__main__':
MCprocess()
您的最佳选择是使用Event。第一个进程在完成时调用event.set()
以指示事件已经发生。等待进程使用event.wait()
或其变体之一来等待事件已设置的唤醒。