併發程式設計總結一,程序

2022-08-13 01:15:18 字數 2028 閱讀 9597

補充:

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程序,在自舉過程結束時由核心...