本發(fā)明涉及進程間數(shù)據(jù)共享技術(shù)領(lǐng)域,具體涉及一種基于Python擴展模塊的多進程共享系統(tǒng)及方法。
背景技術(shù):
在Python開發(fā)環(huán)境中,進程間的交互往往需要共享數(shù)據(jù),同時可能存在數(shù)據(jù)內(nèi)容的頻繁更新。multiprocessing是Python支持多進程管理的程序包,利用multiprocessing的Value,Array,Manager等結(jié)構(gòu)方法能夠創(chuàng)建共享的對象,多個進程訪問該對象實現(xiàn)數(shù)據(jù)的共享。
multiprocessing提供多種方法對象實現(xiàn)進程間的數(shù)據(jù)共享。Manager采用代理與服務(wù)器的模式,由manager對象控制服務(wù)端進程,該進程包含的Python對象可以被其他進程通過代理的方式訪問,實現(xiàn)進程間的數(shù)據(jù)共享。Value和Array是另一種簡單對象,主進程創(chuàng)建對象的實例,并將數(shù)據(jù)存儲在映射的共享內(nèi)存中,通過參數(shù)傳遞的方式供其他進程使用。
以上描述的multiprocessing技術(shù)方案存在的主要缺點是:
1、Value結(jié)構(gòu)為單個數(shù)據(jù)的共享,不能滿足復(fù)雜的表結(jié)構(gòu)共享,而Array結(jié)構(gòu)僅允許使用索引訪問共享的數(shù)據(jù)且個數(shù)固定,功能上受到很大的限制;
2、multiprocessing.Manager本身設(shè)計為代理與服務(wù)器模式,共享數(shù)據(jù)的性能較差,測試發(fā)現(xiàn)在manager中使用Dict對象更新100萬的數(shù)據(jù),耗時超過24秒。同時manager對象控制的服務(wù)器進程缺少健壯的異常處理機制,容易產(chǎn)生異常子進程。
技術(shù)實現(xiàn)要素:
本發(fā)明克服了現(xiàn)有技術(shù)的不足,提供一種基于Python擴展模塊的多進程共享系統(tǒng)及方法。
為解決上述的技術(shù)問題,本發(fā)明采用以下技術(shù)方案:
一種基于Python擴展模塊的多進程共享方法,所述的方法包括以下步驟:
步驟一、初始化全局管理器并解析輸入?yún)?shù);
步驟二、分配指定名稱和大小的共享內(nèi)存,且所述名稱具有唯一性;若已經(jīng)存在,則執(zhí)行步驟4,若不存在,則分配固定大小的內(nèi)存空間;
步驟三、初始化slab內(nèi)存管理器,構(gòu)建紅黑樹,并返回創(chuàng)建Python擴展對象;
步驟四、調(diào)用功能方法,分析處理后返回PyObject對象。
更進一步的技術(shù)方案是所述步驟一包括類型、成員及方法的注冊,以及模塊名稱、內(nèi)存大小的參數(shù)解析。
更進一步的技術(shù)方案是所述步驟四中所述調(diào)用功能方法包括添加,更新,刪除操作。
更進一步的技術(shù)方案是提供一種基于Python擴展模塊的多進程共享系統(tǒng),包括:
內(nèi)存管理模塊,用于定義內(nèi)存管理的接口與程序結(jié)構(gòu),并且利用原子鎖模塊實現(xiàn)加鎖處理;
紅黑樹模塊,用于實現(xiàn)紅黑樹算法邏輯,提供初始化,插入,刪掉方法;
共享內(nèi)存模塊,該模塊實現(xiàn)共享內(nèi)存的分配與回收接口;
原子鎖模塊,用于實現(xiàn)原子互斥鎖邏輯,提供鎖創(chuàng)建,加鎖,解鎖,鎖銷毀方法;
接口模塊,用于利用內(nèi)存管理模塊,紅黑樹模塊以及原子鎖模塊實現(xiàn)功能調(diào)用的接口;
封裝模塊,用于定義Python的擴展類型,注冊對外開放的方法和屬性;
所述共享內(nèi)存模塊、原子鎖模塊分別連接所述內(nèi)存管理模塊;所述內(nèi)存管理模塊連接所述接口模塊;所述紅黑樹模塊連接所述接口模塊;所述原子鎖模塊分別連接所述紅黑樹模塊和接口模塊;所述接口模塊連接所述封裝模塊。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例的有益效果之一是:
1、本發(fā)明相比于multiprocessing等現(xiàn)有技術(shù)具有更高的性能,經(jīng)測試對比發(fā)現(xiàn),操作更新100萬的共享數(shù)據(jù),耗時僅為2.5秒,訪問速度提升近10倍;
2、本發(fā)明通過使用原子鎖和信號機制,保護處理異常子進程,同時避免出現(xiàn)程序死鎖現(xiàn)象,運行程序更加穩(wěn)定,異常處理更加完善;
3、本發(fā)明合理使用內(nèi)存管理機制,減少內(nèi)存碎片化,內(nèi)存利用更加高效。
附圖說明
圖1為本發(fā)明一個實施例的設(shè)計步驟圖。
圖2為本發(fā)明一個實施例中設(shè)計步驟相對應(yīng)的流程圖。
圖3為本發(fā)明另一個實施例的系統(tǒng)模塊結(jié)構(gòu)框圖。
具體實施方式
本說明書中公開的所有特征,或公開的所有方法或過程中的步驟,除了互相排斥的特征和/或步驟以外,均可以以任何方式組合。
本說明書(包括任何附加權(quán)利要求、摘要和附圖)中公開的任一特征,除非特別敘述,均可被其他等效或具有類似目的的替代特征加以替換。即,除非特別敘述,每個特征只是一系列等效或類似特征中的一個例子而已。
下面結(jié)合附圖及實施例對本發(fā)明的具體實施方式進行詳細(xì)描述。
實施例1
如圖1和圖2所示,根據(jù)本發(fā)明的一個實施例,本實施公開一種基于Python擴展模塊的多進程共享方法,該方法的構(gòu)思是在共享內(nèi)存的基礎(chǔ)上,首先通過slab內(nèi)存管理機制優(yōu)化內(nèi)存,并使用紅黑樹結(jié)構(gòu)快速的檢索數(shù)據(jù),接著利用原子互斥鎖解決數(shù)據(jù)的沖突問題,最后以模塊擴展的方式在多個Python進程間進行高效的共享數(shù)據(jù)。
具體的,本實施例基于Python擴展模塊的多進程共享方法包括以下步驟:
步驟1,初始化全局管理器并解析輸入?yún)?shù),包括類型、成員及方法的注冊,模塊名稱、內(nèi)存大小的參數(shù)解析;
步驟2,分配指定名稱和大小的共享內(nèi)存,且名稱具有唯一性,若已經(jīng)存在,則執(zhí)行步驟4,若不存在,則分配固定大小的內(nèi)存空間;
步驟3,初始化slab內(nèi)存管理器,構(gòu)建紅黑樹,并返回創(chuàng)建Python擴展對象;
步驟4,調(diào)用功能方法,分析處理后返回PyObject對象,其功能方法包括添加,更新,刪除等操作。
本實施例方法相比于multiprocessing等現(xiàn)有技術(shù)具有更高的性能,經(jīng)測試對比發(fā)現(xiàn),操作更新100萬的共享數(shù)據(jù),耗時僅為2.5秒,訪問速度提升近10倍。
實施例2
如圖3所示,根據(jù)本發(fā)明的另一個實施例,本實施例公開一種基于Python擴展模塊的多進程共享系統(tǒng),該系統(tǒng)采用模塊化設(shè)計,不同的功能歸屬于不同的模塊,模塊之間利用接口提供服務(wù)(如圖3所示)。其中,內(nèi)存管理模塊負(fù)責(zé)共享內(nèi)存的分配和回收,避免造成內(nèi)存碎片。紅黑樹模塊能夠高效的檢索數(shù)據(jù),提高數(shù)據(jù)訪問的速度。原子鎖模塊除了優(yōu)化加鎖粒度外,對死鎖問題進行了特殊處理,當(dāng)出現(xiàn)進程異常崩潰時,由信號注冊處理程序完成強制解鎖,同時提供進程的掛起服務(wù)。
具體的,本實施例基于Python擴展模塊的多進程共享系統(tǒng)包括:
內(nèi)存管理模塊(SLAB),該模塊定義內(nèi)存管理的接口與程序結(jié)構(gòu),并且利用原子鎖模塊實現(xiàn)加鎖處理;
紅黑樹模塊(RBTREE),該模塊實現(xiàn)紅黑樹算法邏輯,提供初始化,插入,刪掉等方法;
共享內(nèi)存模塊(SHMEM),該模塊實現(xiàn)共享內(nèi)存的分配與回收接口;
原子鎖模塊(SHMTX),該模塊實現(xiàn)原子互斥鎖邏輯,提供鎖創(chuàng)建,加鎖,解鎖,鎖銷毀等方法;
接口模塊(TABLE),該模塊為統(tǒng)一的接口服務(wù),利用內(nèi)存管理模塊,紅黑樹模塊以及原子鎖模塊實現(xiàn)功能調(diào)用的接口;
封裝模塊(MAIN),該模塊定義Python的擴展類型,注冊對外開放的方法和屬性。
所述共享內(nèi)存模塊、原子鎖模塊分別連接所述內(nèi)存管理模塊;所述內(nèi)存管理模塊連接所述接口模塊;所述紅黑樹模塊連接所述接口模塊;所述原子鎖模塊分別連接所述紅黑樹模塊和接口模塊;所述接口模塊連接所述封裝模塊。
本實施例以模塊擴展的方式在多個Python進程間進行高效的共享數(shù)據(jù)。通過使用原子鎖和信號機制,保護處理異常子進程,同時避免出現(xiàn)程序死鎖現(xiàn)象,運行程序更加穩(wěn)定,異常處理更加完善;合理使用內(nèi)存管理機制,減少內(nèi)存碎片化,內(nèi)存利用更加高效。
在本說明書中所談到的“一個實施例”、“另一個實施例”、“實施例”等,指的是結(jié)合該實施例描述的具體特征、結(jié)構(gòu)或者特點包括在本申請概括性描述的至少一個實施例中。在說明書中多個地方出現(xiàn)同種表述不是一定指的是同一個實施例。進一步來說,結(jié)合任一個實施例描述一個具體特征、結(jié)構(gòu)或者特點時,所要主張的是結(jié)合其他實施例來實現(xiàn)這種特征、結(jié)構(gòu)或者特點也落在本發(fā)明的范圍內(nèi)。
盡管這里參照發(fā)明的多個解釋性實施例對本發(fā)明進行了描述,但是,應(yīng)該理解,本領(lǐng)域技術(shù)人員可以設(shè)計出很多其他的修改和實施方式,這些修改和實施方式將落在本申請公開的原則范圍和精神之內(nèi)。更具體地說,在本申請公開權(quán)利要求的范圍內(nèi),可以對主題組合布局的組成部件和/或布局進行多種變型和改進。除了對組成部件和/或布局進行的變型和改進外,對于本領(lǐng)域技術(shù)人員來說,其他的用途也將是明顯的。