You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现mp与generate_info并发执行完成后再运行create_final?

Python多进程与定时线程的并发执行问题解决

原始代码

from threading import Timer
import multiprocessing

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。未引入create_final时,mp与generate_info可正常并发,但加入create_final后,它会与前两者同时运行。已知join()方法仅阻塞主进程,不会影响其他多进程函数,使用concurrent.futures也遇到相同问题。

修改后的代码

根据建议调整代码后,运行表现符合预期:

from threading import Timer
import multiprocessing

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)
    main_process.start()
    side_process.start()
    while main_process.is_alive():
        main_process.join()
        side_process.cancel()
    else:
        create_final()

内容的提问来源于stack exchange,提问作者ARIJIT SINGH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:20:25