zoukankan      html  css  js  c++  java
  • Python3的multiprocessing多进程-Lock、Rlock进程同步

    Python3的multiprocessing多进程-Lock、Rlock进程同步

    一、简介

    对于多进程multiprocessing和多线程threading这两个库的同步,基本上是相似的使用方式。

    1、不使用锁进行同步

    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,
    '''

    2、使用锁进行同步

    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,
    '''
  • 相关阅读:
    HDU3910(数学期望题,题目难懂)
    HDU2389(二分图匹配Hopcroft-Carp算法)
    二分图详解
    巴什博弈、威佐夫博弈、尼姆博弈
    HDU2819(二分图匹配,记录过程)
    查找外键未创建索引
    acl使用示例
    oracle数据库备份任务
    集中备份相关
    集中备份项目实施方案
  • 原文地址:https://www.cnblogs.com/lizm166/p/14658388.html
Copyright © 2011-2022 走看看