2016-02-23 32 views
0

我想在python中做大量的計算。 我想用多進程來做到這一點。 的問題是,我必須運輸大型OBJ(如大numpy的和列表,或numpy的列表),從主過程向由主過程如何在多進程中共享大對象?

這裏創建的過程的問題是: 1.如果我使用像results[i] = pool.apply_async(func, args_tuple)然後它會嘗試醃製args_tuple,這會花費大量的時間 2.我不支持自己的類和numpy類 3.主進程中已準備好所有對象,如果我在生成的進程中獲取它,也會花費時間。

我該如何解決這個問題..也許我應該使用java,如果我已經預測到了這一點,我在文檔中查找它,但似乎每個解決方案都是相同的 - 從主進程到其他(時間成本)

回答

0

據我所知,過程中使用鹹菜之間進行通信的各種方式來傳輸數據(PipesQueue等...)

的一種方法,使您的問題的工作可能可以使用共享變量,但不能同時使用多個進程處理同一個對象,因此取決於您的應用程序。 它們是多處理中一些簡單實現的共享變量:ArrayValue,它們分別是一維數組和單值(int,float,str ...)。 See the documentation here.

但你也可以創建自己的類型,如果你需要,使用ctypesee the documentation here.

+0

我有另一個想法:啓動serveral的過程時,整個程序啓動,如果我有任務,主要過程,而調用其他進程,如果我沒有任務,那麼進程會休眠。 – user3978288

+0

但我不知道如何創建正在等待主進程的進程,以及如何通知並返回。我在哪裏可以找到文檔?或者我可以搜索該做什麼? – user3978288

+0

您應該開始查看Global Interpreter Lock以瞭解多處理中的問題。 – CoMartel