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

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

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

進(jìn)程間通信(IPC)

必要性

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

常用進(jìn)程間通信方法

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

管道通信(Pipe)

1.通信原理

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

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

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

# 創(chuàng)建 管道
fd1, fd2 = Pipe()
def app1():
    print('1 啟動(dòng)應(yīng)用1,請(qǐng)登錄')
    print('2 請(qǐng)求app2授權(quán)')
    fd1.send('app1 請(qǐng)求登錄')
    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('運(yùn)行結(jié)束')
"""
運(yùn)行結(jié)果
(base) [root@VM-0-12-centos pipe]# python pipe.py
-5
-4
-3
-2
-1
1 啟動(dòng)應(yīng)用1,請(qǐng)登錄
2 請(qǐng)求app2授權(quán)
2.5
3 app2 app1 請(qǐng)求登錄
4 app2,發(fā)送完畢
5 ?? ('Dave', '123')
6 登錄成功: ('Dave', '123')
0
運(yùn)行結(jié)束

"""

消息隊(duì)列

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

2. 實(shí)現(xiàn)方法

"""
quque_test.py 消息隊(duì)列演示
注意: 消息隊(duì)列符合先進(jìn)先出原則
"""

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

# 以下模擬 雙色球
# 創(chuàng)建消息隊(duì)列
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é)束')

控制臺(tái)輸出 linux (windows無(wú)效)

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

共享內(nèi)存

1.通信原理

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

2.實(shí)現(xiàn)方法

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(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)
功能: 開(kāi)辟共享內(nèi)存
參數(shù): ctype 表示共享內(nèi)存空間類(lèi)型 'i' 'f' 'c'
	data 共享內(nèi)存空間初始數(shù)據(jù)
返回值: 共享內(nèi)存對(duì)象

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

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

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

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

value 代碼 演示

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

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 開(kāi)辟單一共享內(nèi)存空間
注意:共享內(nèi)存只能有一個(gè)值
"""

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])

信號(hào)量(信號(hào)燈集)

1.通信原理

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

2. 實(shí)現(xiàn)方法

from multiprocessing import Semaphore

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

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

3.代碼演示

"""
信號(hào)量.py 信號(hào)量演示
思路: 信號(hào)量數(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 開(kāi)始執(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é)束')

控制臺(tái)運(yùn)行結(jié)果

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

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

相關(guān)文章

  • python中opencv K均值聚類(lèi)的實(shí)現(xiàn)示例

    python中opencv K均值聚類(lèi)的實(shí)現(xiàn)示例

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

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

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

    Python包管理工具pip的15 個(gè)使用小技巧

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

    Windows下python3.7安裝教程

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

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

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

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

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

    python使用pgzero進(jìn)行游戲開(kāi)發(fā)

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

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

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

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

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

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

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

最新評(píng)論

东兴市| 休宁县| 拉萨市| 浑源县| 蒙阴县| 新龙县| 青海省| 东明县| 华坪县| 富民县| 河池市| 申扎县| 蕲春县| 宁乡县| 茂名市| 石棉县| 石台县| 保康县| 龙海市| 正定县| 陕西省| 长泰县| 阿图什市| 乐清市| 鸡泽县| 克拉玛依市| 张家港市| 稷山县| 左权县| 平远县| 科技| 宾川县| 江西省| 新竹县| 宿松县| 思茅市| 土默特右旗| 临安市| 仁化县| 门源| 绩溪县|