multiprocessing 是多进程库,而不同进程之间的全局变量是不共享的,所以,这也是为什么当你对 python3 全局变量加上锁的时候会失效。
正确处理方式如下:
使用 multiprocessing.Value 和 multiprocessing.Array 来共享数据,可以使进程池中的所有进程能够正确访问和修改共享数据。
代码如下
import multiprocessing
# 创建一个共享变量
shared_variable = multiprocessing.Value('i', 0) # 'i' 表示整数
def increment():
for _ in range(10000):
with shared_variable.get_lock():
shared_variable.value += 1
def decrement():
for _ in range(10000):
with shared_variable.get_lock():
shared_variable.value -= 1
def main():
with multiprocessing.Pool(processes=2) as pool:
pool.apply(increment)
pool.apply(decrement)
if __name__ == "__main__":
main()
print(f"Final value of shared_variable: {shared_variable.value}")