2015-11-06 153 views
0

一個全新的過程我想調用子流程蟒蛇功能,而無需創建當前進程的副本。如何產卵在python

我有一個方法A.run()它應該多次呼叫B.run()A.run()消耗大量的內存,所以我不希望使用ProcessPoolExecutor,因爲它複製了整個內存AFAIK。 我也不想用subprocess.Popen,因爲它有幾個缺點對我說:

  • 只傳遞一個字符串作爲參數
  • 不能採取例外的優勢
  • 我必須知道的B.py位置準確,而不是依託PYTHONPATH

我也不想生成線程,因爲B.run()崩潰容易,我不希望它影響父進程。

有沒有一種方式我忽略了它的優點是產生單獨的進程,沒有額外的內存,但有調用python方法的好處?

編輯1: 解答一些問題:

  • 如果我理解正確的這個,我不需要第一蟒蛇進程的背景下。
  • 因爲我稱之爲具有靜態變量一個C++庫,他們需要被破壞,我不能再利用過程。
+0

您是否想讓第一個python進程的上下文在新的python進程中可用? –

+0

尋找你說的唯一選擇是在分離的線程上運行B,並在手動結束時進行處理 – Netwave

+0

你可以在'A.run'的clostly位之前創建'ProcessPoolExecutor'嗎?也許創建之前'A.run'甚至開始,並在將它作爲一個參數? – Blckknght

回答

0

大多數Unix操作系統在分叉新進程時正在使用寫時複製(Copy-On-Write)。

這意味着,如果內存未被進程子進程更改,則內存不會被重複但共享。

你看有相同的內存量的過程,由於它們使用的虛擬內存,但是當涉及到物理之一,父進程的內存實際上是在共享的唯一副本的事實商場。

如果我認爲正確,並且子進程根本沒有觸及父進程的內存,那麼您只是在浪費自己的時間,違背Unix設計原則。

More info here.