每一個process對象最多隻能調用一次start()方法,join([timeout])方法會阻塞調用process對象的進程,直到timeout時間超時,或者process進程退出。若是timeout設置爲None,則無超時時間。對於linux操做系統的進程管理,父進程會等待子進程退出,並收回子進程的資源,而後父進程再退出。若是父進程先於子進程退出,則子進程會被init進程接管。若是父進程沒有退出也沒有回收子進程資源,則子進程會一直停留在僵死狀態。這裏join方法就是阻塞父進程,等待子進程執行完畢。linux
若是在子進程裏面要接受標準輸入(如調用raw_input函數),這時候會有問題。由於標準輸入是被父進程佔用,所以這裏子進程沒法從標準輸入讀取數據。ide
一個解決辦法是將標準輸入描述符,傳入子進程函數:函數
from multiprocessing import Processui
import sys, osspa
import time操作系統
def intask(x, fileno):orm
sys.stdin = os.fdopen(fileno)對象
while True:進程
in_char = raw_input("Enter to continue, Q to quit: ")ip
if in_char.upper() == 'Q':
break
print x * x
if __name__ == '__main__':
fn = sys.stdin.fileno()
arg = 5
p = Process(target = intask, args = (arg, fn))
p.start()
p.join()