如何基于函数名列表同时执行多个自定义函数?(多进程实现)
用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
相关产品推荐
相关产品推荐

