久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > python 進(jìn)程間通信

        python 進(jìn)程間通信

        來源:千鋒教育
        發(fā)布人:xqq
        時(shí)間: 2023-11-08 02:06:24 1699380384

        雖然可以用文件共享數(shù)據(jù)實(shí)現(xiàn)進(jìn)程間通信,但問題是:

        1)效率低(共享數(shù)據(jù)基于文件,而文件是硬盤上的數(shù)據(jù))2)需要自己加鎖處理

        因此我們最好找尋一種解決方案能夠兼顧:1)效率高(多個(gè)進(jìn)程共享一塊內(nèi)存的數(shù)據(jù))2)幫我們處理好鎖問題。

        mutiprocessing模塊為我們提供的基于消息的IPC通信機(jī)制:隊(duì)列和管道。

        1隊(duì)列和管道都是將數(shù)據(jù)存放于內(nèi)存中

        2隊(duì)列又是基于(管道+鎖)實(shí)現(xiàn)的,可以讓我們從復(fù)雜的鎖問題中解脫出來,我們應(yīng)該盡量避免使用共享數(shù)據(jù),盡可能使用消息傳遞和隊(duì)列,避免處理復(fù)雜的同步和鎖問題,而且在進(jìn)程數(shù)目增多時(shí),往往可以獲得更好的可獲展性

        1.隊(duì)列(推薦使用)

        創(chuàng)建隊(duì)列的類(底層就是以管道和鎖定的方式實(shí)現(xiàn)):

        Queue([maxsize]):創(chuàng)建共享的進(jìn)程隊(duì)列,Queue是多進(jìn)程安全的隊(duì)列,可以使用Queue實(shí)現(xiàn)多進(jìn)程之間的數(shù)據(jù)傳遞。

        參數(shù)介紹:

        maxsize是隊(duì)列中允許最大項(xiàng)數(shù),省略則無大小限制。

        應(yīng)用:

        隊(duì)列的使用

        什么是生產(chǎn)者消費(fèi)者模式

        生產(chǎn)者消費(fèi)者模式是通過一個(gè)容器來解決生產(chǎn)者和消費(fèi)者的強(qiáng)耦合問題。生產(chǎn)者和消費(fèi)者彼此之間不直接通訊,而通過阻塞隊(duì)列來進(jìn)行通訊,所以生產(chǎn)者生產(chǎn)完數(shù)據(jù)之后不用等待消費(fèi)者處理,直接扔給阻塞隊(duì)列,消費(fèi)者不找生產(chǎn)者要數(shù)據(jù),而是直接從阻塞隊(duì)列里取,阻塞隊(duì)列就相當(dāng)于一個(gè)緩沖區(qū),平衡了生產(chǎn)者和消費(fèi)者的處理能力。

        基于隊(duì)列的生產(chǎn)者消費(fèi)者模型

        此時(shí)的問題是主進(jìn)程永遠(yuǎn)不會(huì)結(jié)束,原因是:生產(chǎn)者p在生產(chǎn)完后就結(jié)束了,但是消費(fèi)者c在取空了q之后,則一直處于死循環(huán)中且卡在q.get()這一步。

        解決方式無非是讓生產(chǎn)者在生產(chǎn)完畢后,往隊(duì)列中再發(fā)一個(gè)結(jié)束信號(hào),這樣消費(fèi)者在接收到結(jié)束信號(hào)后就可以break出死循環(huán)。

        生產(chǎn)者在生產(chǎn)完畢后發(fā)送結(jié)束信號(hào)None

        注意:結(jié)束信號(hào)None,不一定要由生產(chǎn)者發(fā),主進(jìn)程里同樣可以發(fā),但主進(jìn)程需要等生產(chǎn)者結(jié)束后才應(yīng)該發(fā)送該信號(hào)

        主進(jìn)程在生產(chǎn)者生產(chǎn)完畢后發(fā)送結(jié)束信號(hào)None

        但上述解決方式,在有多個(gè)生產(chǎn)者和多個(gè)消費(fèi)者時(shí),應(yīng)該怎么做呢?有幾個(gè)消費(fèi)者就發(fā)幾次信號(hào)?

        有幾個(gè)消費(fèi)者就應(yīng)該發(fā)送幾次結(jié)束信號(hào)None

        其實(shí)我們的思路無非是發(fā)送結(jié)束信號(hào)而已,有另外一種隊(duì)列提供了這種機(jī)制

        #JoinableQueue([maxsize]):這就像是一個(gè)Queue對(duì)象,但隊(duì)列允許項(xiàng)目的使用者通知生成者項(xiàng)目已經(jīng)被成功處理。通知進(jìn)程是使用共享的信號(hào)和條件變量來實(shí)現(xiàn)的。

        #參數(shù)介紹:

        maxsize是隊(duì)列中允許最大項(xiàng)數(shù),省略則無大小限制。

        #方法介紹:

        JoinableQueue的實(shí)例p除了與Queue對(duì)象相同的方法之外還具有:

        q.task_done():使用者使用此方法發(fā)出信號(hào),表示q.get()的返回項(xiàng)目已經(jīng)被處理。如果調(diào)用此方法的次數(shù)大于從隊(duì)列中刪除項(xiàng)目的數(shù)量,將引發(fā)ValueError異常

        q.join():生產(chǎn)者調(diào)用此方法進(jìn)行阻塞,直到隊(duì)列中所有的項(xiàng)目均被處理。阻塞將持續(xù)到隊(duì)列中的每個(gè)項(xiàng)目均調(diào)用q.task_done()方法為止

        以上內(nèi)容為大家介紹了python進(jìn)程間通信,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        如东县| 雅安市| 五指山市| 五原县| 鸡西市| 永和县| 阿合奇县| 临安市| 灌南县| 湖北省| 探索| 长丰县| 合作市| 鄯善县| 湘潭市| 广西| 磐石市| 龙陵县| 太湖县| 剑川县| 阜新市| 资源县| 迁西县| 通山县| 龙游县| 普宁市| 绥江县| 荥阳市| 文登市| 江口县| 察雅县| 宁强县| 明光市| 丹东市| 社旗县| 马鞍山市| 屏东市| 沁阳市| 大竹县| 太湖县| 长泰县|