補充:full(), q.empty(), q.get_nowait() 都不適用於多程序的情況下
案列: from multiprocessing import process,queue
def scz(q): 要把佇列的物件傳進來*****
q.put('hello')
def xfz(q):
print(q.get())
if __name__ == '__main__':
q = queue()
p = process(target=scz,args=(q,))
p1 = process(target=xfz,args=(q,))
p.start()
p1.start()
總結:兩個程序之間通訊,是通過佇列來實現的,把 產生的資料放在佇列中,讓另乙個程序提取
在這裡要注意的是要把佇列物件作為引數分別傳給兩個程序
7, 生產者消費者模型:生產者:生成或者製造資料的一方
消費者:處理資料的一方
問題:解決供需不平衡的問題,用到佇列來處理
案列:(不能讓阻塞在data = q.get()位置)
from multiprocessing import process,joinablequeue,queue
import time
import random
def scz(name,food,q):
for i in range(0,10):
data = ('%s生產了%s包子%s'% (name,food,i))
time.sleep(0.5)
q.put(data)
print(data)
def xfz(name,q):
while true:
data = q.get()
if data == none: break # 如果data為none,說明佇列中的資料已被取完
print('%s 吃掉了%s包子'% (name,data))
time.sleep(random.random())
q.task_done() # 告訴佇列從佇列中已取出乙個資料,並且已經全部處理完畢,結束任務 *****
if __name__ == '__main__':
# q = queue()
q = joinablequeue() # *******
p = process(target=scz, args=('111', '牛肉餡', q))
p1 = process(target=scz, args=('盤龍', '白菜餡', q))
c = process(target=xfz, args=('開門', q))
c1 = process(target=xfz, args=('芝麻', q))
c.daemon = true
c1.daemon = true
p.start()
p1.start()
c.start()
c1.start()
#這種方法太low了
# p.join() # 確保生產者確確實實生產完了
# p1.join() # 確保生產者確確實實生產完了
# q.put(none) # 生產者生產完在佇列增加乙個值 none, 當取值取到none時說明佇列中的資料取完了
# q.put(none) # 乙個消費者用乙個none,兩個消費者就得用兩個none ,乙個消費者只要接受到none,立馬結束!
# 高階方法
p.join() # 確保生產者確確實實生產完了
p1.join()
q.join() # 等到佇列中的資料全部被取出
8,程序池與非同步**:*******
一 程序執行緒
1.程序的3種狀態 執行 阻塞 就緒 其中不存在的狀態轉換 阻塞 執行 就緒 阻塞 2.作業系統用於維護程序記錄的結構 程序表或程序控制權 pcb 3.程式使用cpu的3種方式 cpu導向 io導向 平衡型程式 4.程序排程目標 極小化平均時間 級大化系統吞吐量 保持系統各個功能部分均處於繁忙狀態和...
一 程序管理
1基本概念 程序 計算機已執行程式的實體。程式本身只是指令的集合,程序才是程式的真正執行。使用者下達執行程式的命令後,就會產生程序。程序通常有5種狀態,其中前3種為程序的基本狀態。分別為 執行狀態 就緒狀態 阻塞狀態 建立狀態 結束狀態。其中,就緒狀態指程序獲得了除了處理器之外的一切所需資源,一旦得...
Linux程式設計常用的函式(一) 程序
總共分為12部分分別是 程序 執行緒 訊息佇列 訊號量集 共享記憶體 pgsql程式設計 mysql程式設計 網路程式設計 檔案訪問 標準i o 系統資料檔案和資訊 訊號 一 程序 1.程序id為0的程序通常是排程程序,常常被稱為交換程序 程序id為1的程序通常是init程序,在自舉過程結束時由核心...