如何使用多处理 python 顺序运行多个函数?
Posted
技术标签:
【中文标题】如何使用多处理 python 顺序运行多个函数?【英文标题】:How to run multiple functions sequentialy with multiprocessing python? 【发布时间】:2021-02-21 21:26:09 【问题描述】:我正在尝试通过多处理运行多个功能,但遇到了一些困难。我想在所有进程/输入上运行一个初始函数以完成,然后在第一个函数的输出上并行运行 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()
【问题讨论】:
顺便说一句,退出with
会关闭池,使用with
时不需要pool.close()
。
除了map_async
缺少第二个参数,这看起来还可以。有什么问题?
我正在做的过程不可迭代是问题所在。我不确定使用什么作为第二个参数。我在 process2 中运行的单个进程和在 process3 中运行的单个进程中使用 process1 的所有输出。我希望 process2 和 process3 同时运行,因为它们可能很长。
如果 process2 和 process3 都应该只在一个实例中运行,请使用“进程”而不是“池”。为这两个中的每一个创建一个“进程”,启动两个,然后加入两个(如果你想等到两个都终止)。它们将并行运行。 “init”的功能必须以某种方式集成在“processN”函数的开头。
@MichaelButscher 我已经更新了我的代码以使用 Process。但是现在我收到一条错误消息,说 working_dir 没有定义。如何将值传递给 process2/3 ?还是应该是一个单独的问题?
【参考方案1】:
您最好的选择是使用事件。第一个进程在完成时调用event.set()
以指示事件已经发生。等待进程使用event.wait()
或其变体之一等待事件已设置被唤醒。
【讨论】:
以上是关于如何使用多处理 python 顺序运行多个函数?的主要内容,如果未能解决你的问题,请参考以下文章