标签:子进程 proc 关心 注意 5.0 bsp 对象 属性 pre
p.start() # 只是将命令交给操作系统,操作系统什么时候执行,主进程并不关心。主进程执行完p.start()交给操作系统后,就会立马执行下一条语句。
p.join() # 当主进程执行到p.join()时,会就等待p子进程执行完后,再继续下一语句。
不过,注意了,如果有多个子进程,并不是串行执行的。
因为多个子进程其实在后台是在并行执行的,主进程遇到p.join时只是做了判断子进程是否执行完了,执行完了就过,没执行完就等待,
所以主进程的执行时间,取决于最长的子进程的执行时间,而不是所有子进程执行时间之和。
from multiprocessing import Process import time import os class MyProcess(Process): # 继承Process类 def __init__(self, name, n): super().__init__() self.name = name self.n = n def run(self): # 必须重写run方法 print(‘%s 开始执行。。。。‘ % self.name) time.sleep(self.n) print(‘%s 执行结束。。。。‘ % self.name) if __name__ == ‘__main__‘: start_time = time.time() p1 = MyProcess(‘子进程p1‘, 3) p2 = MyProcess(‘子进程p2‘, 5) p3 = MyProcess(‘子进程p3‘, 2) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join() print(‘主线程的执行时间是:‘, time.time() - start_time)
输出结果:
子进程p1 开始执行。。。。
子进程p2 开始执行。。。。
子进程p3 开始执行。。。。
子进程p3 执行结束。。。。
子进程p1 执行结束。。。。
子进程p2 执行结束。。。。
主线程的执行时间是: 5.0111658573150635
串行执行:
from multiprocessing import Process import time import os class MyProcess(Process): # 继承Process类 def __init__(self, name, n): super().__init__() self.name = name self.n = n def run(self): # 必须重写run方法 print(‘%s 开始执行。。。。‘ % self.name) time.sleep(self.n) print(‘%s 执行结束。。。。‘ % self.name) if __name__ == ‘__main__‘: start_time = time.time() p1 = MyProcess(‘子进程p1‘, 3) p2 = MyProcess(‘子进程p2‘, 5) p3 = MyProcess(‘子进程p3‘, 2) p1.start() p1.join() p2.start() p2.join() p3.start() p3.join() print(‘主线程的执行时间是:‘, time.time() - start_time)
执行结果:
子进程p1 开始执行。。。。
子进程p1 执行结束。。。。
子进程p2 开始执行。。。。
子进程p2 执行结束。。。。
子进程p3 开始执行。。。。
子进程p3 执行结束。。。。
主线程的执行时间是: 10.029819011688232
标签:子进程 proc 关心 注意 5.0 bsp 对象 属性 pre
原文地址:https://www.cnblogs.com/beallaliu/p/9190071.html