網(wǎng)站首頁 編程語言 正文
一、隊列基本操作
from queue import Queue q = Queue(5) ?# 創(chuàng)建一個容量為5的隊列。如果給一個小于0的數(shù),則隊列為無限大小。(這是官方的解釋,實際不是無限大小,而是跟內(nèi)存有關(guān)) # 存儲數(shù)據(jù) q.put(123) ?# 數(shù)值? q.put('hello world!') ?# 字符串 q.put(['hello', 'world']) ?# 列表 q.put(('hello', 'world')) ?# 元組 q.put({'hello': 'world'}) ?# 字典 # 如果再試圖存儲第六個,則會發(fā)生阻塞,因為容量已設(shè)定為5 # q.put({'hello': 'python'})
取出隊列中的值:
print(q.get()) print(q.get()) print(q.get()) print(q.get()) print(q.get())
如圖五個值被依次取出。Queue
隊列遵循的是先進先出。
q.put_nowait()
q.put_nowait()
方法可以無阻礙地向隊列中添加內(nèi)容,如果隊列已滿則會立即報錯,不會等待(即不會發(fā)生阻塞)。
q.get_nowait()
q.get_nowait()
方法可以無阻礙地從隊列中取出內(nèi)容,如果隊列是空的則也會直接報錯,不會等待。
具體使用不再示例。
查看隊列當前大小
q.qsize()
print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize()) print(q.get()) print(q.qsize())
如圖,每取出一個值,隊列大小就減一。同樣每存入一個值隊列大小就會加一。
q.full()
判斷隊列是否是滿的。
q.empty()
判斷隊列是否是空的。
print(q.full()) print(q.get()) print(q.get()) print(q.full()) print(q.empty()) print(q.get()) print(q.get()) print(q.get()) print(q.empty())
二、多線程隊列
from queue import Queue import threading import time # 存儲值,每隔一秒存儲一個 def set_value(q): ? ? num = 0 ? ? while True: ? ? ? ? q.put(num) ? ? ? ? num += 1 ? ? ? ? time.sleep(1) # 取值,不間斷地取 def get_value(q): ? ? while True: ? ? ? ? print(q.get()) if __name__ == '__main__': ? ? q = Queue(4) ? ? t1 = threading.Thread(target=set_value, args=(q, )) ? ? t2 = threading.Thread(target=get_value, args=(q, )) ? ? t1.start() ? ? t2.start()
程序開始運行,一邊存儲,一邊取值:
此思想應(yīng)用在爬蟲上,即一邊訪問并獲取數(shù)據(jù),一邊下載數(shù)據(jù)。
原文鏈接:https://skylarkprogramming.blog.csdn.net/article/details/122774661
相關(guān)推薦
- 2022-03-18 C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解_C 語言
- 2022-03-19 Linux系統(tǒng)下安裝Redis數(shù)據(jù)庫過程_Redis
- 2022-11-27 Python+decimal完成精度計算的示例詳解_python
- 2022-07-02 搭建react-typescript-webpack開發(fā)環(huán)境
- 2022-03-09 C++泛型編程Generic?Programming的使用_C#教程
- 2022-11-21 初識React及React開發(fā)依賴詳解_React
- 2022-05-10 bean作用域 設(shè)置創(chuàng)建bean是單實例還是多實例
- 2022-06-22 Android實現(xiàn)歡迎滑動頁面_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支