zoukankan      html  css  js  c++  java
  • 进程(同步)锁

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

    这个时候,我们可以使用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中可能出现问题。这仅仅是一种情况,多个进程之间虽然是独立的,但仅限于内存和运算,如果涉及到其它一些资源,就可能存在竞争问题,在实际使用过程中要注意思考和防范错误。

  • 相关阅读:
    读《31天学会CRM项目开发》记录4
    乡愁
    C#
    C#
    Redhat 离线安装 Docker (Community from binaries)
    使用FRP做内网穿透
    Windows上的Linux容器
    通过Powershell修改文件默认打开方式
    Office2019 VOL版本 自定义安装组件
    使用 Docker 生成 Let’s Encrypt 证书
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/9441054.html
Copyright © 2011-2022 走看看