如何用Python Multiprocessing运行多个无参独立函数?
使用Python multiprocessing运行多个无参数函数的可复用方案
当然没问题!用multiprocessing模块执行无参数的独立函数其实比带参数的场景更简单——不用额外处理参数传递。下面我给你一套可复用、易扩展的代码结构,完美适配你要跑6个(或更多)无参函数的需求。
基础实现思路
核心逻辑很清晰:
- 先定义好所有需要并行运行的无参数函数
- 为每个函数创建一个
multiprocessing.Process实例 - 启动所有进程,最后等待它们全部执行完成(避免主进程提前退出)
可复用的完整代码示例
import multiprocessing import time # ---------------------- # 定义你的无参数业务函数(示例6个) # ---------------------- def task_1(): print("任务1启动") time.sleep(2) # 模拟耗时操作 print("任务1完成") def task_2(): print("任务2启动") time.sleep(1.5) print("任务2完成") def task_3(): print("任务3启动") time.sleep(3) print("任务3完成") def task_4(): print("任务4启动") time.sleep(2.5) print("任务4完成") def task_5(): print("任务5启动") time.sleep(1) print("任务5完成") def task_6(): print("任务6启动") time.sleep(2) print("任务6完成") # ---------------------- # 封装的多进程运行工具(可直接复用) # ---------------------- def run_parallel_tasks(task_list): processes = [] # 为每个任务创建并启动进程 for task in task_list: proc = multiprocessing.Process(target=task) processes.append(proc) proc.start() # 等待所有子进程执行完毕 for proc in processes: proc.join() # ---------------------- # 主程序入口(Windows系统必须加这个判断!) # ---------------------- if __name__ == "__main__": print("主进程开始运行") # 要执行的任务列表——扩展时只需要把新函数加进这个列表 tasks_to_execute = [task_1, task_2, task_3, task_4, task_5, task_6] run_parallel_tasks(tasks_to_execute) print("所有子任务执行完成,主进程结束")
关键细节说明
- 可扩展性:以后要新增任务,只需要定义新的无参函数,然后把它加到
tasks_to_execute列表里就行,完全不用修改run_parallel_tasks工具函数。 - 跨平台兼容性:
if __name__ == "__main__"这个判断必须加,尤其是Windows系统——因为Windows的进程创建机制会重新导入脚本,不加这个会导致无限创建进程的错误。Linux/macOS虽然可以不用,但加上能保证代码跨平台运行。 - 进程同步:
join()方法会让主进程等待对应子进程完成,避免主进程提前退出导致子进程被强制终止。
扩展优化建议
- 控制并发数:如果要运行的任务特别多(比如几十个),不想同时启动太多进程,可以改用
multiprocessing.Pool来限制并发数:
调用时替换def run_with_pool(task_list, max_workers=4): with multiprocessing.Pool(max_workers=max_workers) as pool: # 提交所有无参任务 task_results = [pool.apply_async(task) for task in task_list] # 等待所有任务完成 for res in task_results: res.get()run_parallel_tasks即可,max_workers可以设置同时运行的进程上限。 - 捕获返回值:如果你的任务有返回结果,可以用
Pool.apply_async的get()方法获取,或者用multiprocessing.Queue在进程间传递结果。 - 异常处理:可以在每个任务函数内部添加
try-except块,避免单个任务崩溃影响其他进程运行。
这样的结构既满足你当前的需求,也能轻松适配后续的扩展场景。
内容的提问来源于stack exchange,提问作者ARehman
相关产品推荐
相关产品推荐

