在大多數(shù)情況下,我們經(jīng)常會遇到多線程的情況。線程間的同步和互斥、數(shù)據(jù)共享等都有可能會引發(fā)問題。
在某些情況下,我們需要通過mutex、condition、event等提供的機(jī)制和方法來確保同步和互斥的問題,稍有不慎就會陷入死鎖或者威脅到線程間數(shù)據(jù)的安全。
這時候,Queue
給我們提供了一種較為簡便的解決方案。
Queue包含三種隊(duì)列:
- Queue.Queue(maxsize) 指傳統(tǒng)意義上常見的隊(duì)列:先進(jìn)先出,隊(duì)長為maxsize
- Queue.LifoQueue(maxsize) 后進(jìn)先出,數(shù)據(jù)結(jié)構(gòu)上等同于傳統(tǒng)意義上的棧
- Queue.PriorityQueue(maxsize) 優(yōu)先級隊(duì)列
需要額外注意的是,Queue模塊本身提供了鎖原語,模塊層面上支持多線程數(shù)據(jù)共享,是線程安全的。相比collections.deque
,Queue
旨在提供線程安全的解決方法,API操作自帶鎖原語,而collections.deque
更偏重于數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列概念,支持 in
查詢。
最后需要提一句的是,Python中的import
機(jī)制也是線程安全的,它利用串行引入的機(jī)制保證這一點(diǎn)。