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("锁生效的结果")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)