当前位置: 首页 > news >正文

进程 守护

进程:  正在运行的程序(任务)   是计算机中最小的资源分配单位

  进程调度:--先来先服务调度算法,短作业优先,时间片轮转法,多级反馈队列

并发: 微观上依次执行, 宏观上在同时执行, 同一时刻只有1个cpu在工作

并行: 同一时刻不只1个cpu在工作 微观上就是同时执行多程序的

同步:  程序顺序执行,多个任务之间串行执行 (洗衣完--做饭完--洗碗)

异步:  多个任务同时运行  (在同一时间内洗衣做饭洗碗)

I/O操作:

  input: 输出到内存 read load recv recvfrom accept input

  output: 从内存输出 write dump send sendto connect print

阻塞: recv recvfrom accept 

  程序由于不符合某个条件或者等待某个条件满足 而在某一个地方进入等待状态

非阻塞:

  sk.setblocking(Fasle)就让这个socket模型不阻塞了

multiprocess模块

multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享

process  模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建

p.start():启动进程,并调用该子进程中的p.run() 
p.run():   进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法  
p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法
          需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁 p.is_alive(): 如果p仍然运行,返回True p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。
           timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程
在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制),在创建子进程的时候会自动 import 启动它的这个文件,
而在 import 的时候又执行了整个文件。因此如果将process()直接写在文件中就会无限递归创建子进程报错。
所以必须把创建子进程的部分使用if __name__ ==‘__main__’ 判断保护起来,import 的时候 ,就不会递归运行了。
 
import time
from multiprocessing import Process
#通过并发实现一个有并发效果的socket server
def son_process():  #子进程
    print('son kaishi')
    time.sleep(1)
    print('son end')
if __name__ == '__main__':
    p = Process(target=son_process) #函数名   创建子进程 先执行子进程要执行的代码
    p.start()    #实例化的对象执行方法  通知操作系统开启一个子进程
    print('主进程')

非阻塞
#结果:
#主进程
#son kaishi
#son end  
守护进程
# 每隔1分钟主动汇报当前程序状态
def alive():
    while True:
        print('连接监控 汇报信息')
        time.sleep(0.6)
def func():
    #核心代码
    while True:
        print('选择项目')
        time.sleep(1)
        print('根据选择做出对应操作')
if __name__ == '__main__':
    p = Process(target = alive)
    p.daemon = True  #子进程 设置为 守护进程 守护进程会随着主进程代码的结束而结束
    p.start()
    p = Process(target=func)
    p.start()
    p.join() #在主进程中等待子进程结束 守护进程就可以守护其他子进程了
# 守护进程
# 1.守护进程会等待主进程的代码结束而结束,不会等待其他子进程的结束
# 2.要想守护进程等待其他子进程,只需要在主进程中加上join
操作多个子进程的结束和join阻塞
for i in range(5):
    pass
print(i)  # i=4
lst = []
for i in range(5):
    p = Process()
    lst.append(p)
    p.start()
for p in lst:
    #p.join()
    p.terminate()  #最后两个二选一

 

 

转载于:https://www.cnblogs.com/zhangchen-sx/p/10083815.html

相关文章:

  • sharepoint2013用场管理员进行文档库的爬网提示没有权限,拒绝的解决方法
  • Android中callback(接口回调)机制
  • 模式探索仍有心结,呷哺呷哺应该投入智能科技的怀抱?
  • HTTP请求中POST与GET的差别
  • DESTOON7.0农产品B2B供应求购交易平台源码
  • Python学习笔记
  • 基于DevExpress的Winform程序安装包的制作
  • RocketMQ 基本概念
  • 学习设计接口api(转)
  • 【刘文彬】EOS技术研究:合约与数据库交互
  • Altium Designer 8.0不为人知的27个技巧
  • React-redux的原理以及使用
  • Spring MVC JSP页面加载不完全的问题
  • 工程师笔记|浅析AI平台的架构设计
  • Spark 1.0.0 横空出世 Spark on Yarn 部署(Hadoop 2.4)
  • ----------
  • python3.6+scrapy+mysql 爬虫实战
  • Android框架之Volley
  • ECS应用管理最佳实践
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript实现分页效果
  • MaxCompute访问TableStore(OTS) 数据
  • Mysql数据库的条件查询语句
  • Sass 快速入门教程
  • Service Worker
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 第十八天-企业应用架构模式-基本模式
  • 讲清楚之javascript作用域
  • 异常机制详解
  • C# - 为值类型重定义相等性
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 交换综合实验一
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 数据可视化之下发图实践
  • #etcd#安装时出错
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $.each()与$(selector).each()
  • (02)vite环境变量配置
  • (arch)linux 转换文件编码格式
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)四层和七层负载均衡的区别
  • .naturalWidth 和naturalHeight属性,
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Project Open Day(2011.11.13)
  • .NET 表达式计算:Expression Evaluator
  • .net 调用php,php 调用.net com组件 --
  • .NET文档生成工具ADB使用图文教程
  • @Autowired和@Resource的区别
  • @RequestMapping 的作用是什么?
  • @Transient注解