python之路 併發程式設計之程序 IPC

2021-08-27 07:56:27 字數 1380 閱讀 4383

ipc:程序間的通訊

兩種實現方式

管道:pipe

佇列:queue(其實就是pipe+lock)

注意:兩者實際上都是記憶體空間,不要往裡面放入大資料,只能放資料量較小的訊息

ipc所解決的問題

1.當多個任務併發的去修改共享資料,就可能會造成資料錯亂,我們通過加互斥鎖使多個任務對共享資料的操作由併發變為「序列」,從而保證了共享資料的安全,而當出現需要修改多個共享資料的需求時,我們就得再次加鎖處理

---->ipc幫我們解決了需要自己加鎖的問題

2.程序間的記憶體空間是彼此隔離的,如何完成通訊(資料互動),就需要尋求一種共享的東西,硬碟是共享的,但是讀取硬碟的速度慢

---->ipc實現了一種記憶體空間上的共享(兩個程序之間通過佇列交流)

佇列的使用

from multiprocessing import queue

q = queue(3) # 設定佇列存放大小

q.put('你好')

q.put()

q.put([1,2,3])

print(q.get())

print(q.get())

print(q.get())

注意

1.佇列內可以存放的是python任意型別的資料

2.佇列是先進先出

3.當put的數量大於佇列允許放入的數量時,就會發生阻塞(block=true),直到佇列中有訊息被取走

4.當佇列中的內容被取空時,get操作也會發生阻塞(block=true),直到有新的資料放入佇列中

佇列的其它引數

q.put(obj=,block=,timeout=)

q.get(block=,timeout=)

put()

obj:代表要放入佇列的資料

block:預設為true,代表當放入的資料數量大於佇列允許的數量時,就會發生阻塞;false,則直接丟擲 queue.full 異常

timeout:預設為-1,代表當發生阻塞時,會一直等待(等待佇列中有資料被取走),如果阻塞時間大於自設定的時間,則丟擲queue.full 異常

get()

block:與put()的意思類似,預設值也為true

timeout:與put()的意思類似,預設值為-1

python之路 併發程式設計之程序 互斥鎖

互斥鎖 將多個任務對修改共享資料的操作由併發變為 序列 沒有互斥鎖的情況下 json檔案 執行檔案 import os import time import json import random from multiprocessing import process def check with o...

Python併發程式設計之程序池

前言 本博文主要講解python併發程式設計中的程序池 pool python多程序中的multiprocessing python多程序中的fork python程序通訊之queue 當我們需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但...

併發程式設計之程序

在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組與多執行緒模組threading的程式設計介面類似。multiprocessing模組的功能眾多 支援子程序 ...