2012-06-05 63 views
1

我有一個異步函數被調用是這樣的:在Python中阻塞子進程函數?

from multiprocessing import Process 

def my_function(arg1, arg2): 
    print 'Long process begins' 

p = Process(target=my_function, args=(arg1, arg2,)).start() 

我怎樣才能讓這個攔截?我需要在運行腳本的其餘部分之前完成該過程。

+0

不要使用多進程。只需在腳本中調用'my_function'即可。它會「阻止」。 –

+1

我需要將它作爲一個單獨的進程調用,因爲它與PyQt對象交互,這些對象會像瘋狂一樣泄漏內存。一旦子進程完成,內存就被釋放。 – nathancahill

+0

如果你想有這個函數的返回值和錯誤處理,你可以使用[processify裝飾器](https://gist.github.com/2311116) – schlamar

回答

2

使用p.join()

阻塞調用線程,直到其join()方法是 稱爲終止,或直至可選的超時發生的過程。

如果超時時間爲無,則沒有超時。

一個進程可以連接多次。

進程無法自行加入,因爲這會導致死鎖。它 是在啓動之前嘗試加入進程的錯誤。

+0

完美工作,謝謝。 – nathancahill