标准库模块multiprocessing(六)--进程锁(Lock)--互斥机制

1、创建对象

  lock = Lock()

2、lock.acquire()   

  上锁

3、lock.release()

   解锁  #如果一个锁对象已经被上锁则再调用acquire会阻塞

4、with lock :          上锁

   ....

  ....

  解锁

 

【上锁+解锁】
from
multiprocessing import Process,Lock import sys from time import sleep #sys.stdout作为标准输出流是多个进程共有的资源 def writer1(): lock.acquire() #上锁 for i in range(5): sleep(1) sys.stdout.write("writer1输出\n") lock.release() #解锁 def writer2(): with lock: for i in range(5): sleep(1) sys.stdout.write("writer2输出\n") #创建锁 lock = Lock() w1 = Process(target = writer1) w2 = Process(target = writer2) w1.start() w2.start() w1.join() w2.join() #结果 writer1输出 writer1输出 writer1输出 writer1输出 writer1输出 writer2输出 writer2输出 writer2输出 writer2输出 writer2输出

 

【上锁+不解锁】
from
multiprocessing import Process,Lock import sys from time import sleep #sys.stdout作为标准输出流是多个进程共有的资源 def writer1(): lock.acquire() #上锁 for i in range(5): sleep(1) sys.stdout.write("writer1输出\n") #lock.release() #解锁 def writer2(): with lock: for i in range(5): sleep(1) sys.stdout.write("writer2输出\n") #创建锁 lock = Lock() w1 = Process(target = writer1) w2 = Process(target = writer2) w1.start() w2.start() w1.join() w2.join() #结果 writer1输出 writer1输出 writer1输出 writer1输出 writer1输出 (阻塞...)

 

【不加锁】
from
multiprocessing import Process,Lock import sys from time import sleep #sys.stdout作为标准输出流是多个进程共有的资源 def writer1(): #lock.acquire() #上锁 for i in range(5): sleep(1) sys.stdout.write("writer1输出\n") #lock.release() #解锁 def writer2(): with lock: for i in range(5): sleep(1) sys.stdout.write("writer2输出\n") #创建锁 lock = Lock() w1 = Process(target = writer1) w2 = Process(target = writer2) w1.start() w2.start() w1.join() w2.join() #结果 writer1输出 writer2输出 writer1输出 writer2输出 writer1输出 writer2输出 writer1输出 writer2输出 writer1输出 writer2输出

 

posted @ 2021-01-10 11:03  昱成  阅读(891)  评论(0编辑  收藏  举报