网站搬家后出错免费网站可以做cpa
网站搬家后出错,免费网站可以做cpa,网站源码模板,中国站长工具一 Process对象的join方法 在主进程运行过程中#xff0c;如果想并发地执行其它的任务#xff0c;我们可以开启子进程#xff0c;此时主进程的任务与子进程的任务分两种情况#xff1a;
情况一#xff1a;在主进程的任务与子进程的任务彼此独立的情况下#xff0c;主进程…一 Process对象的join方法 在主进程运行过程中如果想并发地执行其它的任务我们可以开启子进程此时主进程的任务与子进程的任务分两种情况
情况一在主进程的任务与子进程的任务彼此独立的情况下主进程的任务先执行完毕后主进程还需要等待子进程执行完毕然后统一回收资源情况二如果主进程的任务在执行到某一个阶段时需要等待子进程执行完后才能绩效执行就需要有一种机制能够让主进程检测子进程是否运行完毕在子进程执行完毕后才继续执行否则一直在原地阻塞这就是join方法的作用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from multiprocessing import Process import time import random import os def task(): print(%s is piaoing % os.getpid()) time.sleep(random.randrange(1, 3)) print(%s is piao end % os.getpid()) if __name__ __main__: p Process(targettask) p.start() p.join() # 等待p停止才执行下一行代码 print(主进程) 有了join程序不就是串行了吗 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 from multiprocessing import Process import time import random def task(name): print(%s is piaoing % name) time.sleep(random.randrange(1, 3)) print(%s is piao end % name) if __name__ __main__: p1 Process(targettask, args(egon,)) p2 Process(targettask, args(alex,)) p3 Process(targettask, args(yuanhao,)) p4 Process(targettask, args(wupeiqi,)) p1.start() p2.start() p3.start() p4.start() # 会有疑问既然join是等待进程结束那么我像下面这样写进程不就又变成串行的吗 # 当然不是了必须明确p.join()是让谁等 # 很明显p.join()是让主进程等待p的结束卡住是主进程而绝非子进程p p1.join() # 等待p停止才执行下一行代码 p2.join() p3.join() p4.join() print(主进程) 详细解析如下 进程只要start就会在开始运行了所以p1-p4.start()时系统中已经有四个并发的进程了而我们p1.join()是在等p1结束没错p1只要不结束主线程就会一直卡在原地这也是问题的关键join是让主线程等而p1-p4仍然是并发执行的p1.join的时候其余p2p3p4仍然在运行等p1.join结束可能p2p3p4早已经结束了这样p2.joinp3.joinp4.join直接通过检测无需等待所以4个join花费的总时间仍然是耗费时间最长的那个进程运行的时间
上述启动进程与join进程可以简写为 1 2 3 4 5 6 7 p_l [p1, p2, p3, p4] for p in p_l: p.start() for p in p_l: p.join() 二 Process对象的其它属性和方法
进程对象的其它方法一terminate与is_alive 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from multiprocessing import Process import time import random def task(name): print(%s is piaoing % name) time.sleep(random.randrange(1, 5)) print(%s is piao end % name) if __name__ __main__: p1 Process(targettask, args(egon,)) p1.start() p1.terminate() # 关闭进程不会立即关闭所以is_alive立刻查看的结果可能还是存活 print(p1.is_alive()) # 结果为True print(主进程) print(p1.is_alive()) # 结果为False 进程对象的其它属性name和pid 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from multiprocessing import Process import time import random def task(name): print(%s is piaoing % name) time.sleep(random.randrange(1, 5)) print(%s is piao end % name) if __name__ __main__: p1 Process(targettask, args(egon,), name子进程1) # 可以用关键参数来指定进程名 p1.start() print(p1.name, p1.pid) 三 练习题
1、改下下列程序分别实现下述打印效果 1 2 3 4 5 6 7 8 9 10 11 # 效果一保证最先输出--------4 p1.start() p2.start() p3.start() print(-------4) p1.join() 1 2 3 4 5 6 7 8 9 # 效果二保证最后输出--------4 p1.start() p2.start() p3.start() p1.join() p2.join() p3.join() print(-------4) 1 2 3 4 5 6 7 8 9 10 # 效果三保证按顺序输出 p1.start() p1.join() p2.start() p2.join() p3.start() p3.join() print(-------4)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92014.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!