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

如何用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("所有子任务执行完成,主进程结束")

关键细节说明

  1. 可扩展性:以后要新增任务,只需要定义新的无参函数,然后把它加到tasks_to_execute列表里就行,完全不用修改run_parallel_tasks工具函数。
  2. 跨平台兼容性:if __name__ == "__main__"这个判断必须加,尤其是Windows系统——因为Windows的进程创建机制会重新导入脚本,不加这个会导致无限创建进程的错误。Linux/macOS虽然可以不用,但加上能保证代码跨平台运行。
  3. 进程同步: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:43:34