子进程process为什么把第三行的print也给打印出来了?

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',)) 
p.start() 

输出结果:
7196
8232
Run child process test (8232)...

阅读 2.9k
2 个回答
from multiprocessing import Process 
import os 

a = 1

def run_proc(name):
    print(a)
    print(__name__)
    print('Run child process %s (%s)...' % (name, os.getpid()))
    
if __name__=='__main__': 
    a = 2
    p = Process(target=run_proc, args=('test',)) 
    p.start() 
    #p.join()等待子进程结束
    print(a)

由于没有p.join所以等主进程结束后,子进程自动执行,2比1先打印
子进程相当于运行当前文件,只不过name值变更

from multiprocessing import Process 
import os 

a = 1

if __name__=='__mp_main__': 
    print('child process')

def run_proc(name):
    print(a)
    print(__name__)
    print('Run child process %s (%s)...' % (name, os.getpid()))
    
if __name__=='__main__': 
    a = 2
    p = Process(target=run_proc, args=('test',)) 
    p.start() 
    #p.join()
    print(a)

这样好理解么?

刚才有回复一个很相似的问题, 这个原因完全就是因为windows自身实现的问题, 在linux下只会打印一次, 而那次是主进程执行的.

clipboard.png

详情可以参考我的文章: Python: Windows下用multiprocessing的深坑

推荐问题
宣传栏