• 进程(同步)锁


    很多时候,我们需要在多个进程中同时写一个文件,如果不加锁机制,就会导致写文件错乱

    这个时候,我们可以使用multiprocessing.Lock()

    我一开始是这样使用的:

    from multiprocessing import Process, Lock
    #锁要从从multiprocessing导入
    
    def f(l, i):#l为锁,i为传入的值
        l.acquire()#获得一把锁
        print('hello world', i)
        l.release()#释放锁
    
    if __name__ == '__main__':
        lock = Lock()#生成1个锁的实例
    
        for num in range(10):#创建10个子进程
            Process(target=f, args=(lock, num)).start()#将锁传给子进程
    

      结果:

    hello world 1
    hello world 3
    hello world 2
    hello world 5
    hello world 0
    hello world 6
    hello world 9
    hello world 7
    hello world 4
    hello world 8
    

      发现这种方式,锁并没有起作用, 文件内容依然出现了错乱,所以这种方式,虽然lock通过参数传到了每个进程中,但是我们知道进程之间是不共享内存的,所以我理解应该是每个进程获得的锁其实是不同的, 所以无法对写文件起到加锁的效果。以下为进程锁的用处:

    进程锁-----进程与进程之间是独立的,为何需要锁?

    对于进程同步,屏幕的输出只有一个,此时就涉及到资源的竞争(比如会使上述代码结果打印hello world 1还没打印完,就打印出hello world 3)。在Linux的Python2.x中可能出现问题。这仅仅是一种情况,多个进程之间虽然是独立的,但仅限于内存和运算,如果涉及到其它一些资源,就可能存在竞争问题,在实际使用过程中要注意思考和防范错误。

  • 相关阅读:
    基于wax的lua IOS插件开发
    acm
    微策略面试题:在旋转后的数组中查找元素(二分查找)
    BP神经网络
    神经网络理论基础
    机器人关节数学模型
    如何下载中文和英文的全文专利
    Java 12 骚操作, switch居然还能这样玩!
    Java 12 骚操作, String居然还能这样玩!
    Spring Boot YML 掀翻 Properties!!
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/9441054.html
Copyright © 2020-2023  润新知