如何实现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
相关产品推荐
相关产品推荐

