本文主要是介绍在 python3 中使用 multiprocessing,加上锁,却发现锁没用,怎么办?Lock 多进程 多线程 锁 LOCK lock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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 += 1def decrement():for _ in range(10000):with shared_variable.get_lock():shared_variable.value -= 1def 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}")
这篇关于在 python3 中使用 multiprocessing,加上锁,却发现锁没用,怎么办?Lock 多进程 多线程 锁 LOCK lock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!