標籤:one 技術 obs join() bsp 第一個 code 時間 als
python3 進程3
管道
在記憶體中開闢一個管道空間,對多個進程可見。 在通訊形式上形成一種約束;
linux 檔案類型
b c d - l s p
目錄 普通檔案 連結 通訊端 管道
multiprocessing -----> Pipe函數
Pipe(duplex)
功能:建立一個管道
參數:duplex 預設為True 表示管道為雙向管道(全雙工系統);
如果設定為False, 則表示管道為單向管道;
傳回值:返回兩個管道流對象,分配表示管道的兩端;
如果參數為True(預設),兩個對象均可發送接收;
如果為False時,則第一個對象只能接收,第二個對象只能發送;
說明:1, 向管道發送資料使用send()函數,從管道接收資料使用recv() 函數;
2,recv() 函數為阻塞函數,當管道中資料為空白時會阻塞;
3,一次recv() ,只能接收一次send()的內容;
4,send() 可以發送字串數字列表等多種類型資料;
1 from multiprocessing import Process,Pipe 2 import os,time 3 4 #建立管道對象 5 #當參數為False的時候child只能recv parent只能send 6 # child_conn,parent_conn = Pipe(False) 7 8 child_conn,parent_conn = Pipe() 9 10 #子進程函數11 def fun(name):12 time.sleep(1)13 #發送一個字串到管道14 child_conn.send(‘hello‘ + str(name))15 print(os.getppid(),"----",os.getpid())16 17 jobs = []18 #建立5個子進程19 for i in range(5):20 p = Process(target = fun,args = (i,))21 jobs.append(p)22 p.start()23 24 for i in range(5):25 data = parent_conn.recv()26 print(data)27 28 for i in jobs:29 i.join()
View Code
訊息佇列:
multiprocessing ---> Queue
在記憶體中開闢一個隊列模型,用來存放訊息,任何擁有隊列隊形的進程都可以進行訊息的存放和取出;
Queue(maxsize = 0)
功能:建立一個訊息佇列對象;
參數:maxsize 預設為0 表示訊息佇列可以存放的訊息由系統自動分配的空間而定;
> 0 的正整數 表示隊列中最多存放多少條訊息;
傳回值:訊息佇列對象;
q.put()
1,向訊息佇列中存放一條訊息,當訊息佇列滿的時候,會阻塞;
2, 存放的訊息類型可以是數字,列表,字串等;
q.full()
判斷隊列是否為滿, 如果滿則返回True,否則返回False;
q.qsize()
查看當前隊列中訊息數量;
q.get()
擷取訊息,每次擷取一條; 當訊息佇列為空白時,則為阻塞;
說明: put() 、get() 中block參數和timeout參數
block預設為True,表示兩個函數都是阻塞函數;
如果設定為False, 則表示不阻塞;
timeout 當block設定為True時,表示逾時等待時間;
1 from multiprocessing import Queue 2 3 #建立訊息佇列對象 4 q = Queue(3) 5 6 i = 0 7 # 存放訊息 8 while True: 9 #判斷隊列是否滿了10 if q.full():11 print("queue is full")12 break13 q.put("hello" + str(i))14 i += 115 16 print("當前隊列有%d條訊息"%q.qsize())17 18 for i in range(q.qsize()):19 print("擷取訊息%s"%q.get())20 21 print("is empty?",q.empty())22 23 print(q.get(True,3))24 25 print("process over")
View Code
Python之路PythonThread,第三篇,進程3