pythonNET day05
孤儿进程
父进程先于子进程退出,此时子进程就会成为孤儿进程。
孤儿进程会被系统指定的进程收养,即系统进程会成为该孤儿进程新的父进程。孤儿进程退出时该父进程会处理退出状态
僵尸进程
子进程先于父进程退出,父进程没有处理子进程退出状态,此时子进程会成为僵尸进程
* 僵尸进程已经结束,但是会滞留部分PCB信息的内存,大量的僵尸会消耗系统的内存资源,应该尽量避免
如何避免僵尸进程的产生:
父进程处理子进程的退出状态
pid,status = os.wait()
功能:在父进程中阻塞等待处理子进程的退出
返回值:pid 退出的子进程的PID号
status 子进程的退出状态
import os,sys
from time import sleep
pid = os.fork()
if pid < 0:
print("create process failed")
elif pid == 0:
sleep(3)
print("子进程PID:",os.getpid()) # 子进程PID: 4150
sys.exit(3)
else:
#等待子进程退出
pid,status = os.wait()
print(pid,status) # 4150 768
print(os.WEXITSTATUS(status)) #获取退出状态 3
while True:
pass
pid,status = os.wait()
pid,status = os.waitpid(pid,option)
功能:同wait
参数:pid -1 表示任意子进程退出
>0 整数 指定PID号的子进程
option 0 表示阻塞等待
os.WNOHANG 表示非阻塞
返回值:同wait
waitpid(-1,0) = => wait()
import os,sys
from time import sleep
pid = os.fork()
if pid < 0:
print("create process failed")
elif pid == 0:
sleep(3)
print("子进程PID:",os.getpid())
sys.exit(3)
else:
#等待子进程退出
while True: # 不断地循环监听
sleep(1)
pid,status = os.waitpid(-1,os.WNOHANG) # -1等待任意子进程退出 非阻塞
print(pid,status)
if os.WEXITSTATUS(status): # >0 如果WIFEXITED非零,返回子进程退出码
break
print("do something others")
while True:
pass
# 0 0
# do something others
# 0 0
# do something others
# 子进程PID: 4698
# 0 0
# do something others
# 4698 768
pid,status = os.waitpid(-1,os.WNOHANG)
父进程先退出
创建二级子进程
1、父进程创建子进程等待子进程退出
2、子进程创建二级子进程,然后马上退出
3、二级子进程成为孤儿,处理具体事件
# 创建二级子进程处理僵尸进程
import os
from time import sleep
def fun1():
sleep(3)
print("第一件事情")
def fun2():
sleep(4)
print("第二件事情")
pid = os.fork()
if pid < 0:
print("Create process error")
elif pid == 0: # 子进程
# 创建二级进程
pid0 = os.fork()
if pid0 < 0:
print("创建二级进程失败")
elif pid0 == 0: # 子子进程
fun2() # 做第二件事
else: # 子进程
os._exit(0) # 二级进程退出
else:
os.wait()
fun1() # 做第一件事
# tarena@tedu:~/桌面$ python3 1.py
# 第一件事情
# tarena@tedu:~/桌面$ 第二件事情
创建二级子进程处理僵尸进程
multiprocessing 模块创建进程
1. 需要将要做的事情封装成函数
2. 使用multiprocessing提供的类Process创建进程对象
3. 通过进程对象和Process初始化进程进行进程的设置,绑定函数
4. 启动进程,会自动执行绑定的函数
5. 完成进程的回收
创建进程对象
Process() 创建进程对象
参数: target : 要绑定的函数
name : 给进程起的名称 (默认Process-1)
args: 元组 用来给target函数位置传参
kwargs : 字典 用来给target函数键值传参
p.start()
功能 : 启动进程 自动运行terget绑定函数。此时进程被创建
p.join([timeout])
功能: 阻塞等待子进程退出
参数: 超时时间
* 使用multiprocessing创建进程子进程同样复制父进程的全部内存空间,之后有自己独立的空间,执行上互不干扰
* 子进程也是有自己特有的PID等资源
* 如果不使用join回收可能会产生僵尸进程
* 使用multiprocessing创建子进程,一般父进程功能就是创建子进程回收子进程,所有事件交给子进程完成
import multiprocessing as mp
from time import sleep
import os
a = 1
def fun():
sleep(2)
print("子进程事件",os.getpid())
global a
a = 10000
print("a = ",a)
p = mp.Process(target = fun) # 创建进程对象
p.start() # 启动进程
sleep(3)
print("这是父进程")
p.join() # 回收进程
print("parent a:",a)
# 子进程事件 5434
# a = 10000
# 这是父进程
# parent a: 1
Process(target)
pythonNET day05的更多相关文章
- python学习菜单
一.python简介 二.python字符串 三.列表 四.集合.元组.字典 五.函数 六.python 模块 七.python 高阶函数 八.python 装饰器 九.python 迭代器与生成器 ...
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
- python day05笔记总结
2019.4.2 S21 day05笔记总结 一.昨日内容回顾与补充 1.extend(列表独有功能) 循环添加到一个列表中 a.有列表users = ['张三',‘李四] people = [' ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- Python之路PythonNet,第四篇,网络4
pythonnet 网络4 select 支持水平触发 poll 支持水平触发 epoll epoll 也是一种IO多路复用的方式,效率比select和poll 要高一点: epol ...
- Python之路PythonNet,第三篇,网络3
pythonnet 网络3 udp 通信 recvfrom sendtofork 多进程并发threading 多线程并发socketserver 系统模块 套接字的属性 setsockopt g ...
- Python之路PythonNet,第二篇,网络2
pythonnet 网络2 问题: 什么是七层模型tcp 和udp区别三次握手和四次挥手************************************************** tcp ...
- Python之路PythonNet,第一篇,网络1
pythonnet 网络1 ARPAnet(互联网雏形)---> 民用 ISO(国际标准化组织)--->网络体系结构标准 OSI模型 OSI : 网络信息传输比较复杂需要很多功能协同 ...
随机推荐
- Codeforces Round #394 (Div. 2) B. Dasha and friends(暴力)
http://codeforces.com/contest/761/problem/B 题意: 有一个长度为l的环形跑道,跑道上有n个障碍,现在有2个人,给出他们每过多少米碰到障碍,判断他们跑的是不是 ...
- vue2.0 组件和v-model
本文适合初学组件编写的同学阅读. 乍一看这个标题,可能会有疑问:v-model和组件也能扯到一起? 我打算写这篇文章的时候,也是这么想的.咱们按简历的那一套STAR法则来梳理一下这篇文章: 情景[Si ...
- Django框架(上传Excel文件并读取)
博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...
- hdu1846巴什博弈
巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个.最后取光者得胜. 结论:只要不能整除,那么必然是先手取胜,否则后手取胜. #include<map> ...
- 解决MySQL workbench的Can't connect to MySQL server on '127.0.0.1'(10061)问题
如题,今天打开MySQL时,出现了这种问题,无法连接到数据库 问题原因:The error (2003) Can't connect to MySQL server on 'server' (1006 ...
- CentOS7 Could not retrieve mirrorlist http://mirrorlist.centos.org/?...
在执行命令 sudo yum clean expire-cache 清理完过期的缓存后,再执行yum install 或 update命令都失败了.原因是清理过期缓存结果不该被清理的也删掉了,可能是y ...
- L181 The microscopic structure of a cat’s tongue helps keep its fur clean
T.S. eliot's mystery cat, Macavity, besides being a criminal mastermind able to evade the combined r ...
- 第一个openGL程序
一.工具的安装 因为要写C++程序,为了便捷,这里我安装的Visual Studio: 免费使用90天!安装好了之后,我们要为我们的开发安装相应的工具集: 因为我是要在windows上跑的,所以选择如 ...
- ASP.NET CORE网站部署到 windows server 的IIS 上去
章基于我自己经验的一个总结,在windows服务器上部署asp.net core网站.环境是 windows server 2012数据中心版本 第一步先安装 IIS 服务器 接下来就是一路下一步,然 ...
- PyalgoTrade 绘图(七)
PyAlgoTrade使得绘制策略执行变得非常简单 from pyalgotrade import strategy from pyalgotrade.technical import ma from ...