5.1.5 Process对象的其他属性与方法
Posted beallaliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.1.5 Process对象的其他属性与方法相关的知识,希望对你有一定的参考价值。
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
以上是关于5.1.5 Process对象的其他属性与方法的主要内容,如果未能解决你的问题,请参考以下文章