多进程场景下如何跨Python脚本共享全局变量供多个进程函数使用
Python多进程跨脚本共享变量解决方案
核心问题说明
Python 多进程拥有独立的内存地址空间,你当前使用global声明的全局变量仅在当前进程内生效,子进程启动时会复制父进程的内存快照,后续各个进程对变量的修改完全隔离,无法跨进程、跨脚本同步。
具体修改方案
我们使用multiprocessing.Manager提供的共享对象实现跨进程变量共享,该方案兼容所有数据类型,跨脚本也可正常传递使用。
修改script1.py代码
import multiprocessing from script2 import function3 def function1(shared_x): while True: input_val = input() # 若需要数值运算,将输入转为对应类型,此处以整型为例 try: shared_x.value = int(input_val) except ValueError: print("请输入合法数字") def function2(shared_x): while True: print(shared_x.value) # 多进程启动逻辑必须被if __name__ == "__main__"包裹,否则Windows系统会报错 if __name__ == "__main__": with multiprocessing.Manager() as manager: # 初始化共享整型变量,初始值为0 # 若要共享字符串,可改为manager.Value('str', '') shared_x = manager.Value('i', 0) # 将共享变量作为参数传递给所有进程函数 p1 = multiprocessing.Process(target=function1, args=(shared_x,)) p2 = multiprocessing.Process(target=function2, args=(shared_x,)) p3 = multiprocessing.Process(target=function3, args=(shared_x,)) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join()
修改script2.py代码
直接接收传入的共享变量即可,无需声明全局变量:
def function3(shared_x): while True: print(shared_x.value * 2)
注意事项
- 如果有多个进程同时修改共享变量的场景,需要搭配
multiprocessing.Lock加锁,避免出现数据竞争问题 Manager支持共享列表、字典等复杂数据结构,直接调用manager.list()、manager.dict()即可创建对应类型的共享变量- 若只需要共享基础数值类型,也可以用
multiprocessing.Value代替Manager,性能更高但仅支持基础类型
内容的提问来源于stack exchange,提问作者Aayush Scet
相关产品推荐
相关产品推荐

