簡體   English   中英

跨python進程共享模塊

[英]Sharing modules across python processes

我們正在編寫一個內存緊張的系統。 有多個python進程將導入同一組類。 如果進程加載了大量的類,每個進程消耗了幾百兆,那么就有10個進程,我正在進行演出。 有沒有辦法跨python進程“共享”類導入?

摘要:

import classA # Process 1 : loads classA in memory
import classA # Process 2 : reuses what was loaded previously by Process 1

PS:我想要實現的是用C / C ++中的.so模塊做的事情。

如果您的操作系統支持高效的寫時復制分支(很多都可以),則可以節省至少一點內存。 只需在父項中import一次,然后fork()創建所有子項。

請注意,如果您有許多小對象,則不會保存任何內容,因為需要寫入對象的refcounts。 但是,您可以看到大型靜態結構(如屬性字典)可以節省大量資金。

我不相信這在python的設計中是可能的。 如果這是一個大問題,您可能希望使用線程而不是單獨的進程。 另外,如果你只是通過導入幾個模塊運行100 Megs,那么你可能在模塊中做錯了(看起來像是要使用的內存)。

如果你絕對必須導入所有東西,不能減少內存使用而不能使用線程的一種可能性就是將大內存代碼移動到用C / C ++編寫的python擴展中。 這將允許您跨越進程共享python擴展所在的共享庫的公共段。 它也可能會減少內存占用。

PS在python中,你實際上是導入模塊,而不是類。 與C / C ++中的類似,你包括頭文件,而不是類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM