【发布时间】: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 ?还是应该是一个单独的问题?
标签: python windows multiprocessing