python中进程的锁和线程的锁用法一样
- Lock锁(只能锁一个,放一个)
import multiprocessing
import time
lock = multiprocessing.Lock()
def task(args):
p = multiprocessing.current_process()
lock.acquire()
time.sleep(2)
print(p.name)
print(args)
lock.release()
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
if __name__ == '__main__':
run()
2.RLock锁(可以上多把锁,也是锁一个放一个)
lock = multiprocessing.RLock()
def task(args):
p = multiprocessing.current_process()
lock.acquire()
lock.acquire()
time.sleep(2)
print(p.name)
print(args)
lock.release()
lock.release()
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
if __name__ == '__main__':
run()
- seamphore锁(可以控制进入临界区的进程数量)
lock = multiprocessing.BoundedSemaphore(3)
def task(args):
p = multiprocessing.current_process()
lock.acquire()
time.sleep(2)
print(p.name)
print(args)
lock.release()
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
if __name__ == '__main__':
run()
- Condition锁(可以控制任意一次放出的进程的数量)
lock = multiprocessing.Condition()
def task(args):
p = multiprocessing.current_process()
lock.acquire()
lock.wait()
time.sleep(2)
print(p.name)
print(args)
lock.release()
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
if __name__ == '__main__':
run()
while True:
num = int(input("请输入要释放的进程数量:"))
lock.acquire()
lock.notify(num)
lock.release()
- Event锁
lock = multiprocessing.Event()
def task(args):
p = multiprocessing.current_process()
lock.wait()
time.sleep(2)
print(p.name)
print(args)
def run():
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
lock.set() #使锁失效
print("锁失效的结果")
def run2():
lock.clear()#使锁再次生效
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
print("锁生效的结果")