Python:发现多进程各自私有外部数据/ (Process)/ 多进程间无法互相交流
发现了多进程(Process)间:对同一个外部变量,无论加不加同步锁,各进程都使用各自的变量而不会相互影响
首先在实践中发现了该问题,下列代码是后来测试问题所在专门写的:
定义了两个进程子类,分别对外部变量进行获取/获取与修改。
结果表明,两个子类所用的外部变量并不相同。
import time from multiprocessing import Process, Lock a = [1, 2, 3, 4] mu = Lock() # 定义同步锁数据的获取方法 def get(): mu.acquire() b = a mu.release() return b # 定义同步锁数据的增加方法 def add(s): mu.acquire() a.append(s) mu.release() # 一个只读的类 class te(Process): def run(self): while True: print("QQQQQ:a", str(get())) time.sleep(1) # 一个修改+读的类 class fe(Process): def run(self): while True: print("FFFFF:a", str(get())) add("x") time.sleep(1) # 开始测试 if __name__ == '__main__': te().start() fe().start()
结果如下图:蓝色标记的是只读数据的类,黄色标记的是既修改又读取数据的类
可以明显看到,只读数据的类并没有获取到实时(真实)数据
进一步地,我发现它们实际上用着两套数据
修改,让class te 也增加数据:
class te(Process): def run(self): while True: print("QQQQQ:a", str(get())) add("y") time.sleep(1)
运行结果
甚至,不使用同步锁,结果都是一样的:

import time from multiprocessing import Process, Lock a = [1, 2, 3, 4] mu = Lock() def ad(s): a.append(s) # 一个只读的类 class te(Process): def run(self): while True: print("QQQQQ:a", a) ad("y") time.sleep(1) # 一个修改+读的类 class fe(Process): def run(self): while True: print("FFFFF:a", a) ad("x") time.sleep(1) # 开始测试 if __name__ == '__main__': te().start() fe().start()
经过一番百度,发现这是常识
附觉得表达最清楚的资料:
链接1:https://www.cnblogs.com/gmhappy/p/11863983.html
链接2:https://blog.csdn.net/houyanhua1/article/details/78236514?%3E
然而经过使用,发现Process定义的list好像用.append()会报错
附工具目录:
IDE:PyCharm