鍍金池/ 問答/Python/ python的process對象使用start()后為什么輸出全局語句?

python的process對象使用start()后為什么輸出全局語句?

from multiprocessing import Process 
import os 
print(os.getpid())
def run_proc(name): 
    print('Run child process %s (%s)...' % (name, os.getpid()))
if __name__=='__main__': 
p = Process(target=run_proc, args=('test',)) 
print(os.getpid()) 
p.start() 

輸出結果:
8488
8488
8292
Run child process test (8292)...
為什么加了第三行的語句后會多輸出一行子進程pid(8292)

回答
編輯回答
陪她鬧

old answer

因為Process linux下是通過fork形式實現的, 代碼都被復制到子進程中, 所以在Process(target=run_proc, args=('test',)) 之后的代碼, 都會順序依次執(zhí)行..

new answer

你這個代碼應該是在Windows下執(zhí)行的, 因為Windowsunix/linux實現多進程的方式不相同, Windows會在創(chuàng)建新進程是, 再載入一次此模塊:

clipboard.png

unix/linux則無此問題

2018年3月19日 10:44