互斥鎖:在同一個進程內,也有鎖的競爭關係
在同一個進程中連續acquire屢次會產生死鎖
from multiprocessing import Lock """ 互斥鎖:在同一個進程內,也有鎖的競爭關係 在同一個進程中連續acquire屢次會產生死鎖 """ lock = Lock() lock.acquire() # 拿走鑰匙 print(123) lock.acquire() # 又想拿鑰匙 卡住 print(456) lock = Lock() lock.acquire() # 拿走鑰匙 print(123) lock.release() # 還鑰匙 lock.acquire() # 第二我的才能拿到鑰匙,繼續操做 print(456)
Queue隊列
如何解決Queue中,往隊列裏放的值超出設定值的阻塞問題,及put_nowait數據丟失問題
import queue from multiprocessing import Queue q = Queue(5) q.put(1) q.put(1) q.put(1) q.put(1) q.put(1) print('阻塞前') try: q.put_nowait(1) # 放不進去 了,數據丟失 except queue.Full: # 想要數據不丟失,本身建立個容器,在except中將數據添加到容器中 pass print('阻塞後') print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get()) try: q.get_nowait() # 沒有值的話就不會在等了 except queue.Empty: pass
進程和線程的關係
線程的建立
線程的建立方式和進程的建立方式大體相同html
建立線程用threading模塊python
Thread實例對象的方法 # isAlive(): 返回線程是否活動的。 # getName(): 返回線程名。 # setName(): 設置線程名。 threading模塊提供的一些方法: # threading.currentThread(): 返回當前的線程變量。 # threading.enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啓動後、結束前,不包括啓動前和終止後的線程。 # threading.activeCount(): 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。