python多執行緒程式設計 6 佇列同步

2021-06-06 01:03:49 字數 1296 閱讀 4281

前面介紹了互斥鎖和條件變數解決執行緒間的同步問題,並使用條件變數同步機制解決了生產者與消費者問題。

讓我們考慮更複雜的一種場景:產品是各不相同的。這時只記錄乙個數量就不夠了,還需要記錄每個產品的細節。很容易想到需要用乙個容器將這些產品記錄下來。

python的queue模組中提供了同步的、執行緒安全的佇列類,包括fifo(先入先出)佇列queue,lifo(後入先出)佇列lifoqueue,和優先順序佇列priorityqueue。這些佇列都實現了鎖原語,能夠在多執行緒中直接使用。可以使用佇列來實現執行緒間的同步。

用fifo佇列實現上述生產者與消費者問題的**如下:

#encoding=utf-8

import threading

import time

from queue import queue

class producer(threading.thread):

def run(self):

global queue

count = 0

while true:

for i in range(100):

if queue.qsize() > 1000:

pass

else:

count = count +1

msg = '生成產品'+str(count)

queue.put(msg)

print msg

time.sleep(1)

class consumer(threading.thread):

def run(self):

global queue

while true:

for i in range(3):

if queue.qsize() < 100:

pass

else:

msg = self.name + '消費了 '+queue.get()

print msg

time.sleep(1)

queue = queue()

def test():

for i in range(500):

queue.put('初始產品'+str(i))

for i in range(2):

p = producer()

p.start()

for i in range(5):

c = consumer()

c.start()

if __name__ == '__main__':

test()

python多執行緒程式設計 6 佇列同步

前面介紹了互斥鎖和條件變數解決執行緒間的同步問題,並使用條件變數同步機制解決了生產者與消費者問題。讓我們考慮更複雜的一種場景 產品是各不相同的。這時只記錄乙個數量就不夠了,還需要記錄每個產品的細節。很容易想到需要用乙個容器將這些產品記錄下來。python的queue模組中提供了同步的 執行緒安全的佇...

資料結構6 佇列

二 迴圈隊 鏈式隊允許在一端插入,另一端刪除的表叫做隊,或佇列。隊尾 rear 允許插入的一端 隊頭 front 允許刪除的一端 first和last 分別是指向隊頭元素和隊尾元素進隊和出隊 特點 順序對基本用法 首尾指標法 尾指標後置 尾指標指是last指向隊尾的後乙個元素,元素載入last指標位...

python佇列執行緒池 Python多執行緒與佇列

多執行緒爬蟲對比單執行緒爬蟲有很大的優勢,雖然python中的多執行緒並不是真正意義上的多執行緒,執行緒不可以同時執行,而是順序序列執行的,只是在乙個執行緒在等待時,cpu切換到另外乙個執行緒接著幹活,這樣看起來就感覺像是並行。雖然如此,多執行緒的效率仍然比單執行緒快上很多倍,是爬蟲中不可缺少的技能...