以下代碼來自:https://www.cnblogs.com/lipijin/p/3709903.html,這裏只是將其中print轉爲python3方式,通過依次看這幾段代碼以及運行結果應該能夠理解start和join方法,文字描述反而可能會造成誤解。
In [1]: #encoding:utf-8
...: from multiprocessing import Process
...: import os, time, random
...:
...: #線程啓動後實際執行的代碼塊
...: def r1(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...:
...: def r2(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...:
...: if __name__ == "__main__":
...: print("main process run...")
...: p1 = Process(target=r1, args=('process_name1', )) #target:指定進程執行的函數,args:該函數的參數,需要使用tuple
...: p2 = Process(target=r2, args=('process_name2', ))
...:
...: p1.start() #通過調用start方法啓動進程,跟線程差不多。
...: p2.start() #但run方法在哪呢?待會說。。。
...: p1.join() #join方法也很有意思,尋思了一下午,終於理解了。待會演示。
...: p2.join()
...: print("main process runned all lines...")
...:
main process run...
process_name1 7713
process_name2 7714
process_name1 7713
process_name2 7714
process_name2 7714
process_name1 7713
process_name1 7713
process_name2 7714
process_name1 7713
process_name2 7714
main process runned all lines...
In [1]: #encoding:utf-8
...: from multiprocessing import Process
...: import os, time, random
...:
...: def r():
...: print('run method')
...:
...: if __name__ == "__main__":
...: print("main process run...")
...: #沒有指定Process的targt
...: p1 = Process()
...: p2 = Process()
...: #如果在創建Process時不指定target,那麼執行時沒有任何效果。因爲默認的run方法是判斷如果不指定target,那就什麼都不做
...: #所以這裏手動改變了run方法
...: p1.run = r
...: p2.run = r
...:
...: p1.start()
...: p2.start()
...: p1.join()
...: p2.join()
...: print("main process runned all lines...")
...:
main process run...
run method
run method
main process runned all lines...
In [1]: #encoding:utf-8
...: from multiprocessing import Process
...: import os, time, random
...:
...: def r1(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...: def r2(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...:
...: if __name__ == "__main__":
...: print("main process run...")
...: p1 = Process(target=r1, args=('process_name1', ))
...: p2 = Process(target=r2, args=('process_name2', ))
...:
...: p1.start()
...: p2.start()
...: #p1.join()
...: #p2.join()
...: print("main process runned all lines...")
...:
main process run...
process_name1 7881
main process runned all lines...
process_name2 7882
process_name2 7882
process_name2 7882
process_name2 7882
process_name2 7882
process_name1 7881
process_name1 7881
process_name1 7881
process_name1 7881
In [1]: #encoding:utf-8
...: from multiprocessing import Process
...: import os, time, random
...:
...: def r1(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...: def r2(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random()*2)
...:
...: if __name__ == "__main__":
...: print("main process run...")
...: p1 = Process(target=r1, args=('process_name1', ))
...: p2 = Process(target=r2, args=('process_name2', ))
...:
...: p1.start()
...: p2.start()
...: p1.join()
...: #p2.join()
...: print("main process runned all lines...")
...:
main process run...
process_name1 7938
process_name2 7939
process_name1 7938
process_name1 7938
process_name1 7938
process_name2 7939
process_name1 7938
process_name2 7939
main process runned all lines...
process_name2 7939
process_name2 7939
In [1]: #encoding:utf-8
...: from multiprocessing import Process
...: import os, time, random
...:
...: def r1(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random())
...: def r2(process_name):
...: for i in range(5):
...: print(process_name, os.getpid()) #打印出當前進程的id
...: time.sleep(random.random()*2)
...:
...: if __name__ == "__main__":
...: print("main process run...")
...: p1 = Process(target=r1, args=('process_name1', ))
...: p2 = Process(target=r2, args=('process_name2', ))
...:
...: p1.start()
...: p1.join()
...: p2.start()
...: #p2.join()
...: print("main process runned all lines...")
...:
main process run...
process_name1 7993
process_name1 7993
process_name1 7993
process_name1 7993
process_name1 7993
main process runned all lines...
process_name2 7994
process_name2 7994
process_name2 7994
process_name2 7994
process_name2 7994