博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Process 开启子进程 的两种方式、join控制子进程、守护进程
阅读量:4961 次
发布时间:2019-06-12

本文共 1827 字,大约阅读时间需要 6 分钟。

一、join控制子进程的一种方式

  当主进程需要在子进程结束之后结束时,我们需要用到join来控制子进程。

import timeimport randomfrom multiprocessing import Processdef func(index):    time.sleep(random.random())    print('第%s个邮件已经发送完毕'%index)if __name__ == '__main__':    p_list = []    for i in range(10):        p = Process(target= func,args=(i,))        p.start()        p_list.append(p)    for p in p_list:        p.join()        # 阻塞  直到p进程执行完毕就结束阻塞    print('10个邮件已经发送完成')

10个发邮件的子进程是同时创建的,但是是随机分批次执行的,两个for循环几乎是同时进行的,一边执行,一边发送。

二、join控制子进程的一种方式

  当我们需要一面向对象编程时

import osfrom multiprocessing import Processclass MyProcess(Process):    def __init__(self,arg):        super().__init__()    # 调用父类的__init__方法        self.arg = arg    def run(self):        print('子进程',os.getpid(),os.getppid(),self.arg)if __name__ == '__main__':    for i in range(10):        p = MyProcess('参数')        p.start()   # 开启一个子进程,让这个子进程执行run方法        # p.join()        print('主进程:',os.getpid())

三、守护进程

import timefrom multiprocessing import Processdef func():    print('子进程 start')    time.sleep(3)    print('子进程 end')if __name__ == '__main__':    p = Process(target= func)    p.daemon = True   # 设置p为一个守护进程,必须在start之前完成    p.start()    time.sleep(2)    print('主进程')

1、通过daemon给主进程设置一个守护进程。必须在start之前完成

2、守护进程会随着主进程的代码执行完毕而结束

import timefrom multiprocessing import Processdef func1():    count = 1    while True:        time.sleep(0.5)        print(count*'*')        count +=1def func2():    print('func2 start')    time.sleep(5)    print('func2 end')if __name__ == '__main__':    p1 = Process(target=func1)    p1.daemon = True    p1.start()    Process(target=func2).start()    time.sleep(3)    print('主程序')

结果为:

func2 start***************主程序func2 end
如果主进程代码已经执行完毕,但是子进程还没有执行完,守护进程不会继续执行 守护进程会随着主进程的代码执行结束而结束 主进程会等待子进程结束,守护进程只等待主进程代码结束就结束了

 

转载于:https://www.cnblogs.com/youhongliang/p/9677459.html

你可能感兴趣的文章
C#基础|值类型和引用类型以及传参问题
查看>>
centos7+hadoop完全分布式集群搭建
查看>>
kubernetes国内镜像拉取
查看>>
C# ref 和 out 的使用
查看>>
根据存储过程,查询此过程的参数和参数数据类型讯息
查看>>
Oracel 数据库函数
查看>>
win7 64位配置mysql 5.6免安装版,初始化配置
查看>>
[转]Android 完美退出 App (Exit)
查看>>
[转]用PROCEDURE ANALYSE优化MYSQL表结构
查看>>
[转]Jquery操作select
查看>>
[转]15 个顶级 HTML5 游戏引擎
查看>>
[转]ASP.NET中的forms验证
查看>>
Qualified name lookup
查看>>
牛逼的产品经理最重要的特质是什么?
查看>>
Shiro学习
查看>>
Linux 目录递归赋权,解决 Linux权限不够
查看>>
面向对象(OO,封装、继承、多态)
查看>>
cmd命令行给main传参数
查看>>
整理了一份招PHP高级工程师的面试题
查看>>
iOS--inputView和inputAccessoryView
查看>>