在 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 += 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}")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值