立即學習:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu
1.互斥鎖:
??????? 多進程間的內存是相互隔離的,因此其數據也是相互隔離的,但是所有的進程都共享一個文件操作系統或者說共享文件處理器和打印端。而共享帶來的是競爭,競爭帶來的是混亂,而解決這種混亂則用到了互斥鎖!實際上互斥鎖的應用使得多進程按照串行的方式進行運行(串行可以通過互斥鎖和join來實現,具體請看下一個學習筆記)
?
2.優劣勢:
?????? 互斥鎖保證了各進程間數據處理的有序性,避免了上述情況的混亂,但是使得一次只能有一個進程在運行,降低了運行效率。
?
3.關鍵知識點:
?????? 1)模塊:multiprocessing和threading模塊
??????? 2)Process類和Thread類
??????? 3)acquire()——獲得鎖,release()——釋放鎖
?
4.代碼:
1)multiprocessing模塊(進程鎖)
from multiprocessing import Process,Lock
import timedef task(name,lock):lock.acquire()print('%s 1'%name)time.sleep(2)print('%s 2'%name)time.sleep(2)print('%s 3'%name)lock.release()if __name__ == '__main__':lock = Lock()for i in range(3):p = Process(target=task, args=('子進程%s'%i,lock))p.start()'''
E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/并發編程/互斥鎖.py
子進程0 1
子進程0 2
子進程0 3
子進程1 1
子進程1 2
子進程1 3
子進程2 1
子進程2 2
子進程2 3Process finished with exit code 0
'''
2)threading模塊(線程鎖)
import threading
import timedef task(name,lock):lock.acquire()print('%s 1'%name)time.sleep(2)print('%s 2'%name)time.sleep(2)print('%s 3'%name)lock.release()if __name__ == '__main__':lock = threading.Lock()for i in range(3):p = threading.Thread(target=task, args=('子進程%s'%i,lock))p.start()
注:具體看后面的學習筆記