多进程锁、共享内存

  1. 多进程锁
    当我们用多进程来读写文件的时候,如果一个进程是写文件,一个进程是读文件,如果两个文件同时进行,肯定是不行的,必须是文件写结束以后,才可以进行读操作。或者是多个进程在共享一些资源的时候,同时只能有一个进程进行访问,那就要有一个锁机制进行控制。
    acquire()
    locked()
    release() //释放锁,使用前线程必须已获得锁定,否则抛出异常
    lock=thread.allocate_lock():生成锁对象
    lock.acquire():加锁
    线程使用锁对象
    lock.release(): 线程调度释放锁
    查看locked()状态
    获得一把锁,把对放的锁释放
    threading 高级别多线程模块
    threading 不需要进程的控制来控制线程
    threading.Thread: 类
    成员方法:
    start() 启动
    run() 重写
    join() 阻塞
    getName()
    setName()
    isDaemon() 判断线程是否随主线程一起结束
    setDaemon() 设置线程与主线程一起结束
  2. 多进程共享内存
    python的multiprocessing模块也给我们提供了共享内存的操作。
    一般的变量在进程之间是没法进行通讯的,multiprocessing给我们提供了Value和Array模块,他们可以在不通的进程中共同使用。
    import multiprocessing
    
    #lock = multiprocessing.Lock()
    #lock.acquire()  获取锁
    #lock.release()  释放锁
    #with lock: 加锁
    
    import time
    
    # Value()
    # Array()
    def add(number,add_value,lock):
        lock.acquire()
        try:
            print("init add{0} number = {1}".format(add_value,number.value))
            for i in xrange(1,6):
                number.value += add_value
                print("############add{0} has added#######".format(add_value))
                time.sleep(1)
                print("add{0} number = {1}".format(add_value,number.value))
        except Exception as e:
            raise e
        finally:
            lock.release()
    def change(arr):
        for i in range(len(arr)):
            arr[i] = -arr[i]
    
    if __name__ == "__main__":
        lock = multiprocessing.Lock() #加锁
        number = multiprocessing.Value('i',0) #共享内存
        arr = multiprocessing.Array('i',range(10)) #共享内存数组 
        print(arr[:])
        p1 = multiprocessing.Process(target=add,args=(number,1,lock))
        p2 = multiprocessing.Process(target=add, args=(number, 3,lock))
        p3 = multiprocessing.Process(target=change, args=(arr,))
        p1.start()
        #p1.join()
        p2.start()
        ##p2.join()
        p3.start()  #启动
        p3.join()
        print(arr[:])
        print("main end")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值