python进程中的锁

python进程中的锁,第1张

python进程中的锁

python中进程的锁和线程的锁用法一样

  1. 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()
  1. 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()
  1. 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()
  1. 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("锁生效的结果")

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存