Lock
并发进程的执行如果要想进行同步处理,那么就必须对一些核心的代码部分进行同步,所以在Python中提供了一个Lock的同步锁机制,利用这种锁机制可以实现部分代码的同步锁定,保证每一次只允许一个进程执行这一部分的代码。

售车票程序锁机制处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import multiprocessing,time def worker(lock,dict): while True: lock.acquire(timeout=5) number = dict.get("ticket") if number > 0: time.sleep(1) number -= 1 print("[%s] ticket = %s" % (multiprocessing.current_process().name,number)) dict.update({"ticket":number}) else: break lock.release() def main(): lock = multiprocessing.Lock() manager = multiprocessing.Manager() mgr_dict = manager.dict(ticket=5) job_process = [multiprocessing.Process(target=worker, name=("售票员 - %s" % item), args=(lock,mgr_dict,)) for item in range(3)] for process in job_process: process.start() for process in job_process: process.join() print("[%s]所有进程执行完毕,最终剩余票数:%s" % (multiprocessing.current_process().name,mgr_dict.get("ticket"))) if __name__ == "__main__": main()
|
[售票员 - 0] ticket = 4
[售票员 - 1] ticket = 3
[售票员 - 2] ticket = 2
[售票员 - 0] ticket = 1
[售票员 - 1] ticket = 0
[MainProcess]所有进程执行完毕,最终剩余票数:0
进程已结束,退出代码0
注: 一旦程序之中追加了锁,那么程序的部分代码就只能够以单进程的模式执行了,这样就势必造成程序的执行性能下降,只有在考虑数据操作安全性的问题时的情况下才会用到锁机制。