最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中進程間通信詳細(xì)介紹

 更新時間:2021年12月16日 10:14:09   作者:jialan75  
大家好,本篇文章主要講的是python中進程間通信詳細(xì)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

進程間通信(IPC)

必要性

進程間空間獨立,資源不共享,此時在需要進程間數(shù)據(jù)傳輸時就需要特定的手段進行數(shù)據(jù)通信

常用進程間通信方法

管道 消息隊列 共享內(nèi)存 型號 信號量 套接字

管道通信(Pipe)

1.通信原理

在內(nèi)存中開辟管道空間,生成管道操作對象,多個進程使用同一個管道對象進行讀寫即可實現(xiàn)通信

代碼演示(windows 無效 linux 可用)

"""
pipe.py 管道通信
注意
1. multiprocessing 中管道通信只能用于有親緣關(guān)系進程中
2. 管道對象在父進程中創(chuàng)建,子進程通過父進程獲取
"""
from multiprocessing import Process, Pipe

# 創(chuàng)建 管道
fd1, fd2 = Pipe()
def app1():
    print('1 啟動應(yīng)用1,請登錄')
    print('2 請求app2授權(quán)')
    fd1.send('app1 請求登錄')
    data = fd1.recv()
    print('5 ??',data)
    if data:
        print('6 登錄成功:', data)


def app2():
    print('2.5')
    # 阻塞等待讀取管道內(nèi)容
    data = fd2.recv()
    print('3 app2', data)
    fd2.send(('Dave', '123'))
    print('4 app2,發(fā)送完畢')


if __name__ == '__main__':
    print(-5)
    p1 = Process(target=app1)
    print(-4)
    p2 = Process(target=app2)
    print(-3)
    p1.start()
    print(-2)
    p2.start()
    print(-1)
    p1.join()
    print(0)
    p2.join()
    print('運行結(jié)束')
"""
運行結(jié)果
(base) [root@VM-0-12-centos pipe]# python pipe.py
-5
-4
-3
-2
-1
1 啟動應(yīng)用1,請登錄
2 請求app2授權(quán)
2.5
3 app2 app1 請求登錄
4 app2,發(fā)送完畢
5 ?? ('Dave', '123')
6 登錄成功: ('Dave', '123')
0
運行結(jié)束

"""

消息隊列

在內(nèi)存中建立隊列模型,進程通過隊列將消息存入,或者從隊列取出完成 進程間通信

2. 實現(xiàn)方法

"""
quque_test.py 消息隊列演示
注意: 消息隊列符合先進先出原則
"""

# 創(chuàng)建消息隊列
from multiprocessing import Queue, Process
from random import randint

# 以下模擬 雙色球
# 創(chuàng)建消息隊列
q = Queue(5)

def handle():
    print(5)
    for i in range(6):
        q.put(randint(1, 33))
    q.put(randint(1, 16))

def request():
    print(6)
    l = [q.get() for i in range(6)]
    l.sort()
    l.append(q.get())
    print(7,l)

if __name__ == '__main__':
    print(0)
    p1 = Process(target=handle)
    print(1)
    p2 = Process(target=request)
    print(2)
    p1.start()
    print(3)
    p2.start()
    print(4)
    p1.join()
    p2.join()
    print(8)
    print('程序結(jié)束')

控制臺輸出 linux (windows無效)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cXtoSmyN-1639571874327)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211215185302558.png)]

共享內(nèi)存

1.通信原理

在內(nèi)存中開辟一塊空間,進程可以寫入內(nèi)容和讀取內(nèi)容完成通信,但是每次寫入內(nèi)容會覆蓋之前內(nèi)容

2.實現(xiàn)方法

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-A5RVhKd1-1639571874328)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211215185911875.png)]

value ,array

from multiprocessing import Value,Array

obj = Value(ctype,data)
功能: 開辟共享內(nèi)存
參數(shù): ctype 表示共享內(nèi)存空間類型 'i' 'f' 'c'
	data 共享內(nèi)存空間初始數(shù)據(jù)
返回值: 共享內(nèi)存對象

obj.value 對象屬性的修改查看即對共享內(nèi)存讀寫

obj = Array(ctype,data)
功能: 開辟共享內(nèi)存
參數(shù): ctype 表示共享內(nèi)存空間類型 'i' 'f' 'c'
	data 整數(shù)表示開辟空間的大小,其數(shù)據(jù)表示開辟空間
返回值: 共享內(nèi)存對象

Array共享內(nèi)存讀寫:通過遍歷obj可以得到每個值,直接通過索引可以修改

* 可以使用obj.value 直接打印共享內(nèi)存中的字節(jié)串

value 代碼 演示

"""
value.py 開辟單一共享內(nèi)存空間
注意:共享內(nèi)存只能有一個值
"""

from multiprocessing import Value,Array,Process


import time
import random
ctype = 'i'
data = 5000
# 創(chuàng)建共享內(nèi)存
money = Value(ctype,data)

# 操作共享內(nèi)存
def man():
    for i in range(30):
        time.sleep(0.1)
        money.value += random.randint(1,1000)
        print('man',money.value)

def girl():
    for i in range(30):
        time.sleep(0.1)
        money.value -= random.randint(1,800)
        print('girl', money.value)

if __name__ == '__main__':
    p1 = Process(target=man)
    p2 = Process(target=girl)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print('程序結(jié)束',money.value)

array 代碼演示

"""
array.py 開辟單一共享內(nèi)存空間
注意:共享內(nèi)存只能有一個值
"""

from multiprocessing import Array,Process


ctype = 'i'
data = [1,2,3,4]
# 創(chuàng)建共享內(nèi)存
# shm = Array(ctype,data)

# 表示初始值 [0,0,0,0,0]
shm = Array(ctype,5)


def fun():
    for i in shm:
        print(i)
    shm[1] = 1000
if __name__ == '__main__':
    p1 = Process(target=fun)
    p1.start()
    p1.join()
    print('程序結(jié)束',shm[1])

信號量(信號燈集)

1.通信原理

給定一個數(shù)量多多個進程可見,多個進程都可以操作該數(shù)增減,并根據(jù)數(shù)量值決定自己的行為

2. 實現(xiàn)方法

from multiprocessing import Semaphore

sem = Semaphore(num)
功能: 創(chuàng)建信號量對象
參數(shù): 信號量的初始值
返回值: 信號量對象

sem.acquire() 信號量減1 當(dāng)信號量為0時阻塞
sem.release() 信號量加1
sem.get_value() 獲取信號量數(shù)量

3.代碼演示

"""
信號量.py 信號量演示
思路: 信號量數(shù)量相當(dāng)于資源,執(zhí)行任務(wù)必須消耗資源
"""
import os
from multiprocessing import Semaphore
from multiprocessing import Process
from time import sleep

num = 3
sem = Semaphore(num)


# 任務(wù)函數(shù)
def handle():
    sem.acquire()  # sem -1
    print("%s 開始執(zhí)行任務(wù)" % os.getpid())
    sleep(3)
    print("%s 執(zhí)行任務(wù)完畢" % os.getpid())
    sem.release()  # sem +1


if __name__ == '__main__':
    ths = []
    for i in range(10):
        p = Process(target=handle)
        p.start()
        ths.append(p)

    for p in ths:
        p.join()
    print('程序結(jié)束')

控制臺運行結(jié)果

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BjnjTpgF-1639571874329)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211215203718835.png)]

到此這篇關(guān)于python中進程間通信詳細(xì)介紹的文章就介紹到這了,更多相關(guān)python進程間通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中opencv K均值聚類的實現(xiàn)示例

    python中opencv K均值聚類的實現(xiàn)示例

    本文主要介紹了python中opencv K均值聚類的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python數(shù)據(jù)展示之生成表格圖片

    Python數(shù)據(jù)展示之生成表格圖片

    這篇文章主要介紹了Python數(shù)據(jù)展示之生成表格圖片,文章基于Python庫的相關(guān)資料展開對主題的詳細(xì)介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • Python包管理工具pip的15 個使用小技巧

    Python包管理工具pip的15 個使用小技巧

    python的大多數(shù)擴展包,都可以使用pip來自動安裝。所以pip還是有很多小技巧的。這篇文章主要給大家介紹了關(guān)于Python包管理工具pip的15 個使用小技巧,需要的朋友可以參考下
    2021-05-05
  • Windows下python3.7安裝教程

    Windows下python3.7安裝教程

    這篇文章主要為大家詳細(xì)介紹了Windows下python3.7安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python使用unicodedata實現(xiàn)字符串標(biāo)準(zhǔn)化

    Python使用unicodedata實現(xiàn)字符串標(biāo)準(zhǔn)化

    這篇文章主要來和大家聊一聊 Python 的一個內(nèi)置模塊:unicodedata,它是專門用來處理 unicode 字符串的,下面就一起來看看它的用法吧
    2023-06-06
  • Python實現(xiàn)IP代理批量采集的示例代碼

    Python實現(xiàn)IP代理批量采集的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)IP代理批量采集,并檢測代理是否可用。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-09-09
  • python使用pgzero進行游戲開發(fā)

    python使用pgzero進行游戲開發(fā)

    今天要和大家分享的pgzero(pygame zero)是在pygame基礎(chǔ)上做了進一步的封裝,使得設(shè)計一款游戲十分的方便,特別適合少兒編程領(lǐng)域的教學(xué), 與scratch相得益彰。
    2021-06-06
  • PyCharm安裝庫numpy失敗問題的詳細(xì)解決方法

    PyCharm安裝庫numpy失敗問題的詳細(xì)解決方法

    今天使用pycharm編譯python程序時,由于要調(diào)用numpy包,但又未曾安裝numpy,于是就根據(jù)pycharm的提示進行安裝,最后竟然提示出錯,下面這篇文章主要給大家介紹了關(guān)于PyCharm安裝庫numpy失敗問題的詳細(xì)解決方法,需要的朋友可以參考下
    2022-06-06
  • 淺談python已知元素,獲取元素索引(numpy,pandas)

    淺談python已知元素,獲取元素索引(numpy,pandas)

    今天小編就為大家分享一篇淺談python已知元素,獲取元素索引(numpy,pandas),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python matplotlib imshow熱圖坐標(biāo)替換/映射實例

    python matplotlib imshow熱圖坐標(biāo)替換/映射實例

    這篇文章主要介紹了python matplotlib imshow熱圖坐標(biāo)替換/映射實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

全椒县| 阳信县| 双辽市| 大方县| 闽侯县| 莱芜市| 十堰市| 舞阳县| 武隆县| 云阳县| 彝良县| 巍山| 崇仁县| 连州市| 荆门市| 永州市| 柘城县| 通州市| 衡水市| 盐池县| 商水县| 宁化县| 阿拉尔市| 金山区| 井陉县| 察隅县| 中江县| 孝感市| 洛南县| 平南县| 视频| 衡阳市| 富裕县| 类乌齐县| 周至县| 宁津县| 镇康县| 安新县| 宜丰县| 师宗县| 长子县|