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)

阅读 2.7k
1 个回答

old answer

因为Process linux下是通过fork形式实现的, 代码都被复制到子进程中, 所以在Process(target=run_proc, args=('test',)) 之后的代码, 都会顺序依次执行..

new answer

你这个代码应该是在Windows下执行的, 因为Windowsunix/linux实现多进程的方式不相同, Windows会在创建新进程是, 再载入一次此模块:

clipboard.png

unix/linux则无此问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题