【python】详解multiprocessing多进程-Lock、Rlock进程同步(四)

【python】详解multiprocessing多进程-process模块(一)
【python】详解multiprocessing多进程-Pool进程池模块(二)
【python】详解multiprocessing多进程-Queue、Pipe进程间通信(三)
【python】详解multiprocessing多进程-Lock、Rlock进程同步(四)
【python】详解multiprocessing多进程-总结(五)
       对于多进程multiprocessing和多线程threading这两个库的同步,基本上是相似的使用方式。之前写过threading的Lock、Rlock一文,详细讲解了锁的同步使用,详见:【python】详解threading模块:lock、Rlock的使用(二)本此总结可以结合该文章,在此基础上进一步展示实例:

不使用锁进行同步
import multiprocessing
import time


def job(v, num):
    for _ in range(5):
        time.sleep(0.1)  # 暂停0.1秒,让输出效果更明显
        v.value += num   # v.value获取共享变量值
        print(v.value, end=",")


def multicore():
    v = multiprocessing.Value('i', 0)  # 定义共享变量
    p1 = multiprocessing.Process(target=job, args=(v, 1))
    p2 = multiprocessing.Process(target=job, args=(v, 3))  # 设定不同的number看如何抢夺内存
    p1.start()
    p2.start()
    p1.join()
    p2.join()


if __name__ == '__main__':
    multicore()

'''
# 进程1和进程2在相互抢着使用共享内存v
1,5,9,13,17,4,8,12,16,20,
'''
使用锁进行同步
import multiprocessing
import time
# lock = multiprocessing.Lock()
lock = multiprocessing.RLock()
def job(v, num,lock):
    lock.acquire()
    for _ in range(5):
        time.sleep(0.1)  # 暂停0.1秒,让输出效果更明显
        v.value += num  # v.value获取共享变量值
        print(v.value, end=",")
    lock.release()

def multicore():
    v = multiprocessing.Value('i', 0)  # 定义共享变量
    p1 = multiprocessing.Process(target=job, args=(v, 1, lock))
    p2 = multiprocessing.Process(target=job, args=(v, 3, lock))  # 设定不同的number看如何抢夺内存
    p1.start()
    p2.start()
    p1.join()
    p2.join()

'''
# 显然,进程锁保证了进程p1的完整运行,然后才进行了进程p2的运行
1,2,3,4,5,8,11,14,17,20,
'''
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值