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