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

如何基于函数名列表同时执行多个自定义函数?(多进程实现)

用multiprocessing实现函数并行执行

没问题,我来帮你搞定基于函数名列表的并行执行需求。用Python的multiprocessing模块就能轻松实现,给你两种实用的方案:

方案1:手动创建Process进程

这种方式能逐个控制每个函数的进程,灵活性更高,适合需要单独管理进程的场景:

import multiprocessing

# 获取用户输入并整理成干净的函数名列表
inp = raw_input("functions you want to execute, sep by commas:")
alist = [j.strip() for j in inp.split(',')]  # 处理输入中可能混有的空格

# 你的函数定义保持不变
def func1():
    print 'FUNCTION 1'
def func2():
    print 'FUNCTION 2'
def func3():
    print 'FUNCTION 3'

if __name__ == '__main__':
    processes = []
    
    for func_name in alist:
        # 通过函数名从全局命名空间获取对应的函数对象
        target_func = globals()[func_name]
        # 创建进程并绑定目标函数
        p = multiprocessing.Process(target=target_func)
        processes.append(p)
        # 启动进程
        p.start()
    
    # 等待所有进程执行完毕
    for p in processes:
        p.join()

方案2:使用Pool进程池

如果你的函数都是无参数的,用进程池会更简洁,适合批量处理的场景:

import multiprocessing

inp = raw_input("functions you want to execute, sep by commas:")
alist = [j.strip() for j in inp.split(',')]

def func1():
    print 'FUNCTION 1'
def func2():
    print 'FUNCTION 2'
def func3():
    print 'FUNCTION 3'

if __name__ == '__main__':
    # 创建进程池,进程数与要执行的函数数量一致
    with multiprocessing.Pool(processes=len(alist)) as pool:
        # 把函数名转换成对应的函数对象列表
        funcs = [globals()[name] for name in alist]
        # 批量并行执行函数
        pool.map(lambda f: f(), funcs)

关键细节说明:

  • 我用globals()[func_name]来获取函数对象,比eval更直接安全;如果你坚持原有的eval方式,也可以把进程的target改成lambda: eval(f"{func_name}()"),效果完全一致。
  • if __name__ == '__main__':是必须的!这是Python多进程在Windows系统下的强制要求,能避免进程启动时的递归导入问题,Linux/macOS下虽然可以省略,但加上能保证跨平台兼容性。
  • 两种方案都会让你的函数同时并行执行,进程启动后会独立运行,直到所有函数都完成任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:57