2014-04-01 130 views
0

我有python函數,我正在maya中運行該進程。我想把這個函數作爲另一個進程來運行,所以maya會繼續響應,我可以繼續在maya上工作。沒有掛父進程的子進程

from multiprocessing import Process 
def test_func(node): 
    # I have some crazy functions in here 
    pass 

def run_test(): 
    p = Process(target=test_func, args=(items,)) 
    p.daemon = True 
    p.start() 

這只是一個測試功能。我想只顯示我正在嘗試做什麼。任何想法什麼是啓動一個過程而不打擾maya的聰明方式?

非常感謝

+0

如果你調用'run_test()'會發生什麼? – jfs

+0

它只是凍結maya – Achayan

回答

2

對於所有人來說,這可能並不明顯,因爲您很快就瞭解了一個關鍵問題......但您嘗試在Autodesk Maya會話中使用multiprocessing。據我所知,這是行不通的。

由於高層次的原因,我相信其他人可以提供更多的細節,multiprocessing.Process想分叉Maya進程並繼續運行。這意味着它需要複製整個瑪雅圖像(如果你在場景中做了很多事情,可能會超過1GB的內存),並繼續運行。您通過Maya API執行的任何操作都將處於完全不同的過程中,處於不同的場景圖形中。此外,您很可能會死鎖,因爲主進程中的所有各種同步原語狀態現在都按原樣複製到新空間。

你最好是堅持使用Maya中的線程解決方案,或者採用外部過程。儘管有線程化,但與Maya API進行交互的能力有限,並且它們提供了用於在主線程中執行調用並甚至等待其結果的實用程序。

再一次,任何其他人對過程分叉和死鎖知識較低的知識,請隨時擴展此答案。

+0

線程解決方案在Maya中,我不清楚這個:( – Achayan

+0

可以子進程或線程池可以在這種情況下工作? – Achayan

+0

@Achayan - 雅我只是想使用線程。線程池應該工作,所以應該一個子進程調用除了超級超級罕見的情況,這也造成了叉子期間的死鎖) – jdi

0

我沒有做任何的python多線程,只有C++,但除非進程隱式使用多線程,它不會在同一時間運行。查找屬於標準庫的線程模塊的文檔。

+0

'multiprocessing.Process'在Python中創建一個單獨的OS進程。它在「同時」運行。 – jfs

+0

然後op的代碼應該可以工作。 – cheshircat