Lock

from multiprocessing import Process,Lock
import time,sys 

def worker1(stream):
    lock.acquire() # 加锁
    for i in range(5):
        time.sleep(1)
        stream.write("Lock acquired via\n")
    lock.release()#解锁

def worker2(stream):
    # lock.acquire()
    with lock:    #加锁 语句块结束即解锁
        for i in range(5):
            time.sleep(1)
            stream.write("Lock acquired directly\n")
    # lock.release()

lock = Lock()
#sys.stdout为所有进程都拥有的资源
w1 = Process(target=worker1,args=(sys.stdout,))
w2 = Process(target=worker2,args=(sys.stdout,))

w1.start()
w2.start()

w1.join()
w2.join()
#加锁后,先执行worker1再执行worker2,或者先执行worker2再执行woker1
posted @ 2018-11-09 20:05  IndustriousHe  阅读(179)  评论(0编辑  收藏  举报