Discuss / Python / 想知道p.start的运行过程是怎样的

想知道p.start的运行过程是怎样的

Topic source

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)?如果在p.start()后面再加行 print(os.getpid()),输出结果为: 9208 9208 9208 4816 Run child process test (4816)... 为什么输出的是父进程pid,而且还跑前面去了?希望有大神指点一下。

第一问主要不清楚Process创建的子进程执行的是哪一段代码。 第二问我懂了是没有join函数的原因。那么p.start()后父进程和子进程是同时执行还是父进程执行完后子进程再执行?如果是前者,谁先打印pid是否与两个进程执行到打印语句的时间有关?

好想删掉,好蠢。。。

bnckakc

#4 Created at ... [Delete] [Delete and Lock User]

你好,第一个问题的答案是什么

@bnckakc 我是这么理解的,子进程运行会自动import自身的模块,也就是if name='main'上面的部分。这也是windows平台下多进程必须写进if name='main'的原因吧,模块里直接写逻辑可能会因为类似情况出现一些问题。

Licheetools

#6 Created at ... [Delete] [Delete and Lock User]

正如你所知道的进程之间的执行都是异步的,所以join()函数的作用就是使该子线程能够一直保持执行或者是在限定的时间内始终让该子线程执行,超过时间后,再是异步执行。所以子进程和父进程都是同步执行的了。


  • 1

Reply