佇列get函式和get nowait函式及異常捕獲

2021-08-19 03:15:16 字數 1848 閱讀 5021

import multiprocessing

import time

if __name__ == '__main__':

# 建立訊息佇列

# 3: 表示訊息佇列最大個數

queue = multiprocessing.queue(3)

# 放入資料

queue.put(1)

queue.put("abc")

queue.put(["abc", "456"])

# 佇列滿了在放入資料, 就不能放入資料了,直到訊息佇列有空閒位置才能再放入資料

# queue.put(("34", 90))

# put_nowait: 不會等待佇列有空閒位置再放入資料,如果資料放入不成功就直接崩潰

# queue.put_nowait(("34", 90))

# 建議: 放入資料使用put,因為比較安全不會崩潰

# 檢視佇列是否是滿的

# result = queue.full()

# print(result)

# 坑點: 只使用put放入資料直接判斷佇列是否為空獲取的結果不正確,因為沒有等佇列把資料寫完直接就取獲取了,那麼這是佇列是空的

# for i in range(10000):

# print(i)

# 解決辦法: 1. 延時一段時間 2. 通過個數去判斷

# time.sleep(0.001)

#if queue.qsize() == 0: # mac 版本不能使用qsize()

print("佇列是空的")

# result = queue.empty()

# print(result)

# 檢視佇列的個數

size = queue.qsize()

print("訊息佇列個數:", size)

# 獲取佇列的資料

value = queue.get()

print(value)

size = queue.qsize()

print("訊息佇列個數:", size)

# 獲取佇列的資料

value = queue.get()

print(value)

size = queue.qsize()

print("訊息佇列個數:", size)

# 獲取佇列的資料

value = queue.get()

print(value)

size = queue.qsize()

print("訊息佇列個數:", size)

# 隊列為空, 使用get會等待,直到佇列有資料以後再取值

# value = queue.get()

# print(value)

# 隊列為空,取值的時候不等待,但是取不到值那麼直接崩潰了

# value = queue.get_nowait()

# print(value)

# 建議: 獲取佇列的資料統一get,因為能保證**不會有問題

try:

value = queue.get(timeout = 1)

finally:

print(value)

size = queue.qsize()

print("訊息佇列個數:", size)

print("結束!")

當隊列為空時,再呼叫get函式,程式會阻塞,導致無法正常執行後面的**,程式也不會退出,可以用get_nowait函式,當隊列為空,不會等待,直接丟擲異常,若想輸出後面的內容,可以用try…finally…捕獲異常執行。附:(timeout = 1可作為函式的引數)

C 的getline()和get()函式

在介紹這兩個函式之前,我們最常使用的字元或者字串輸入函式是cin 所以我們應當明白有了cin之後為什麼還需要這兩個函式?一.cin函式cin a a如果是字元型別,讀取乙個位元組,a如果是字串型別,就讀取乙個單詞 賦值 將得到的輸入賦給a 讀取結束標誌 使用空白 空格,製表符和換行符 來確定字串的結...

matlab 的set和get函式

clc,clear all syms x x 7 0.1 5 y x.2 2 x hf 1為圖形的控制代碼handle,set get的物件為圖形figure,設定背景色為white ha 1 figure color white reset ha 1 重置引數 position的第乙個引數為在fi...

佇列Queue的get方法

寫了一段生產者消費者模型的 1 from time import sleep 2from random import randint,random 3from multiprocessing import process,queue45 6def consumer q,name 7while 1 8...