前两个函数同时运行完成后执行第三个函数

问题描述 投票:0回答:1

我有以下代码:

class RepeatTimer(Timer):
    """
    Extending the threading.Timer class to execute functions at fixed intervals.
    """
    def run(self):
        while not self.finished.wait(self.interval):
            self.function(*self.args, **self.kwargs)

def parallel_process(mp, arguments, cb_fn):
    main_process = multiprocessing.Process(target=mp, args=[arguments, cb_fn])
    side_process = RepeatTimer(30, generate_info)
    final_process = multiprocessing.Process(target=create_final)
    main_process.start()
    side_process.start()
    main_process.join()
    side_process.cancel()
    final_process.start()
    final_process.join()

mp
generate_info
create_final
是我正在使用的函数。我希望同时执行
mp
generate_info
,然后在完成后执行
create_final

如果我不使用

mp

 功能,
generate_info
create_final
会同时运行,但是当我使用该功能后,它也会在另外两个运行时开始运行。我读到了它并了解到
join()
方法只会阻塞主进程,而不是其他多处理函数。

我该怎么做才能得到我想要的输出?即使使用

concurrent.futures
也会引发相同的错误。

python multiprocessing
1个回答
0
投票

您描述的情况只有一个点需要同时发生多个事情,因此按理说您只需要2个进程而不是4个(主进程+3个子进程)。减少进程数量可以更轻松地跟踪流量控制,这样您就不会意外地无序运行。这是我如何重组的一个例子:

def mp():
    sleep(10)
    print("mp done")

def generate_info():
    print("info")

def create_final():
    print("done")

if __name__ == "__main__":
    mp_runner = Process(target=mp, )
    mp_runner.start()
    while mp_runner.is_alive():
        generate_info()
        mp_runner.join(1) #timeout to join gives loop timer interval
    create_final()
© www.soinside.com 2019 - 2024. All rights reserved.