python筆記29 佇列Queue

2022-06-14 04:00:09 字數 2775 閱讀 8884

python的queue模組提供一種適用於多執行緒程式設計的fifo實現。它可用於在生產者(producer)和消費者(consumer)之間執行緒安全(thread-safe)地傳遞訊息或其它資料,因此多個執行緒可以共用同乙個queue例項。queue的大小(元素的個數)可用來限制記憶體的使用。

python2和python3的匯入不一樣,python2是import queue,python3是import queue

常用方法:

queue.get是從佇列裡拿資料,queue.put是往佇列新增資料

import queue

# 設定上限maxsize=10

q = queue.queue(maxsize=10)

# 往佇列加10個資料

for i in range(100):

if q.qsize() >= 10:

# 存放的資料達到上限maxsize,插入會導致阻塞

break

else:

q.put(i)

# 從佇列取值

while not q.empty():

n = q.get()

print("本次取出資料:%s" % n)

執行結果:

本次取出資料:0

本次取出資料:1

本次取出資料:2

本次取出資料:3

本次取出資料:4

本次取出資料:5

本次取出資料:6

本次取出資料:7

本次取出資料:8

本次取出資料:9

# utf-8

import queue

import threading

import time

exitflag = 0

class mythread (threading.thread):

def __init__(self, threadid, name, q):

threading.thread.__init__(self)

self.threadid = threadid

self.name = name

self.q = q

def run(self):

print("starting " + self.name)

process_data(self.name, self.q)

print("exiting " + self.name)

def process_data(threadname, q):

while not exitflag:

queuelock.acquire()

if not workqueue.empty():

data = q.get()

queuelock.release()

print("%s processing %s" % (threadname, data))

else:

queuelock.release()

time.sleep(1)

users = ["user-1", "user-2", "user-3"]

usernames = ["name1", "name2", "name3", "name4", "name5", "name6", "name7", "name8", "name9", "name10"]

queuelock = threading.lock()

workqueue = queue.queue(10)

threads =

threadid = 1

# 建立新執行緒

for tname in users:

thread = mythread(threadid, tname, workqueue)

thread.start()

threadid += 1

# 填充佇列

queuelock.acquire()

for word in usernames:

workqueue.put(word)

queuelock.release()

# 等待佇列清空

while not workqueue.empty():

pass

# 通知執行緒是時候退出

exitflag = 1

# 等待所有執行緒完成

for t in threads:

t.join()

print("exiting main thread")

執行結果:

starting user-1

starting user-2

starting user-3

user-3 processing name1

user-2 processing name2

user-1 processing name3

user-3 processing name4

user-2 processing name5

user-1 processing name6

user-3 processing name7

user-2 processing name8

user-1 processing name9

user-3 processing name10

exiting user-2

exiting user-1

exiting user-3

exiting main thread

python自動化交流 qq群:779429633

29 餐桌上的7(佇列)

有一種酒桌遊戲叫做 敲7 規則是從乙個人開始,說出任意數字,其他人會順序往後報,如果乙個數字包含 7,或者是 7 的倍數,那麼需要敲打杯子或盤子,不能說出。現在 n 個人 圍坐在乙個圓桌周圍,他們編號從 1 到 n 順時針排列。從某一人開始報出乙個數字,其他人 會按照順時針方向順序往後報 加1 如果...

python3佇列使用

python3直接import queue 會報錯,要改成import queue from queue import queue maxsize 1 from queue import queue 執行緒佇列通訊使用 這個是普通的佇列模式,類似於普通列表,先進先出模式,get方法會阻塞請求,直到有...

03 佇列操作

時間限制 100ms 記憶體限制 100kb 描述假設以帶頭節點的迴圈鍊錶表示佇列,並且只設乙個指標指向隊尾元素節點 不設頭指標 節點元素這裡設為整型,編寫佇列的初始化 入隊和出隊演算法。其中入隊元素個數n及其節點資料,和出隊元素個數m都是從鍵盤輸入 預設n m都不小於0 然後輸出出隊元素,出隊不合...