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

python_31-32

目录

1.进程

2.同步进程:

3.守护进程:


1.进程

# ### 进程 process
import os,time"""
# ps -aux 查看进程号
# ps -aux | grep 2784 过滤查找2784这个进程# 强制杀死进程
kill -9 进程号# 获取当前进程号
res = os.getpid()
print(res)# 获取当前进程的父进程
res = os.getppid()
print(res)
"""
from multiprocessing import Process# (1) 进程的使用"""
def func():# 1.子进程id:3561,2.父进程id:3560print("1.子进程id:{},2.父进程id:{}".format(os.getpid(),os.getppid()))if __name__ == "__main__":# 创建子进程 ,返回进程对象p = Process(target=func)# 调用子进程p.start()# 3.主进程id:3560,4.父进程id:3327print("3.主进程id:{},4.父进程id:{}".format(os.getpid(),os.getppid()))
"""# (2) 创建带有参数的进程"""
def func(n):time.sleep(1)for i in range(1,n+1): # 0 ~ n-1print(i)print("1.子进程id:{},2.父进程id:{}".format(os.getpid(),os.getppid()))if __name__ == "__main__":n = 6# target=指定任务  args = 参数元组p = Process(target=func , args=(n,))p.start()for i in range(1,n+1):print("*" * i)
"""# (3) 进程之间的数据彼此隔离
"""
total = 100
def func():global totaltotal +=1print(total)if __name__ == "__main__":p = Process(target=func)p.start()time.sleep(1)print(total)
"""# (4) 进程之间的异步性
"""
1.多个进程之间是异步的并发程序,因为cpu调度策略问题,不一定先执行哪一个任务
默认来看,主进程执行速度稍快于子进程,因为子进程创建时,要分配空间资源可能会阻塞
阻塞态,cpu会立刻切换任务,以让程序整体的速度效率最大化2.默认主进程要等待所有的子进程执行结束之后,在统一关闭程序,释放资源
若不等待,子进程可能不停的在系统的后台占用cpu和内存资源形成僵尸进程.
为了方便进程的管理,主进程默认等待子进程.在统一关闭程序;
"""def func(n):print("1.子进程id:{},2.父进程id:{}".format(os.getpid(),os.getppid()) , n )if __name__ == "__main__":for i in range(1,11):p = Process(target=func,args=(i,))p.start()print("主进程执行结束了 ... " , os.getpid() )

2.同步进程:

# ### 1.同步主进程和子进程 : join
"""必须等待当前的这个子进程执行结束之后,再去执行下面的代码;,用来同步子父进程;"""
from multiprocessing import Process
import time # (1) join 的基本使用
"""
def func():print("发送第一封邮件 :  我的亲亲领导,你在么?")	if __name__ == "__main__":p = Process(target=func)p.start()# time.sleep(0.1)p.join()print("发送第二封邮件 :  我想说,工资一个月给我涨到6万")
"""# (2) 多进程场景中的join
"""
def func(i):time.sleep(1)print("发送第一封邮件{} :  我的亲亲领导,你在么?".format(i))if __name__ == "__main__":lst = []for i in range(1,11):p = Process(target=func,args=(i,))p.start()# join 写在里面会导致程序变成同步lst.append(p)# 把所有的进程对象都放在列表中,统一使用.join进行管理;for i in lst:i.join()print("发送第二封邮件 :  我想说,工资一个月给我涨到6万")
"""# ### 2使用自定义进程类,创建进程# (1) 基本语法
import osclass MyProcess(Process):def run(self):print("1.子进程id:{},2.父进程id:{}".format(os.getpid(),os.getppid()))if __name__ == "__main__":p = MyProcess()p.start()# (2) 带有参数的自定义进程类class MyProcess(Process):def __init__(self,name):# 手动调用一下父类的构造方法,完成系统成员的初始化;super().__init__()self.name = namedef run(self):print("1.子进程id:{},2.父进程id:{}".format(os.getpid(),os.getppid()))print(self.name)if __name__ == "__main__":p = MyProcess("我是参数")p.start()

3.守护进程:

# ### 守护进程
"""
守护进程守护的是主进程,当主进程所有代码执行完毕之后,立刻强制杀死守护进程;
"""from multiprocessing import Process
import time# (1) 基本语法
"""
def func():# time.sleep(1)print("start... 当前的子进程")print("end ...  当前的子进程")if __name__ == "__main__":p = Process(target=func)# 在进程启动之前,设置守护进程p.daemon = True	p.start()	print("主进程执行结束 ... ")
"""# (2) 多个子进程的守护场景;
"""默认主进程等待所有非守护进程,也就是子进程执行结束之后,在关闭程序,释放资源
守护进程只要在主进程代码执行结束时,就会自动关闭;
""""""
def func1():print("start ... func1 执行当前子进程 ... ")print("end ...   func1 结束当前子进程 ... ")def func2():count = 1while True:print("*" * count)time.sleep(1)count += 1if __name__ == "__main__":p1 = Process(target=func1)p2 = Process(target=func2)# 把p2这个进程变成守护进程;p2.daemon = Truep1.start()p2.start()print("主进程执行结束 ... ")
"""# (3) 守护进程用途: 监控报活
def alive():while True:print("3号服务器向总监控服务器发送报活信息: i am ok~")time.sleep(1)def func():while True:try:print("3号服务器负责抗住3万用户量的并发访问...")time.sleep(3)# 主动抛出执行错误的异常,触发except分支raise RuntimeError			except:print("3号服务器扛不住了.. 快来修理我..")breakif __name__ == "__main__":p1 = Process(target=alive)p2 = Process(target=func)p1.daemon = Truep1.start()p2.start()# 必须等待p2这个子进程执行完毕之后,再放行主进程下面的代码# 下面主进程代码执行结束,立刻杀死守护进程,失去了报活功能;p2.join()print("主进程执行结束  .... ")

http://www.lryc.cn/news/339599.html

相关文章:

  • 关于机器学习/深度学习的一些事-答知乎问(四)
  • [spring] Spring Boot REST API - 项目实现
  • ELK之Filebeat实用配置及批量部署(部署200+可用)
  • 用odin实现的资源复制编辑器
  • linux监控文件操作行为
  • 单链表接口函数的实现(增删查改)
  • 超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯片
  • uniapp_微信小程序_NaN
  • 1043: 利用栈完成后缀表达式的计算
  • 初学ELK - elk部署
  • [Java EE] 计算机工作原理与操作系统简明概要
  • 【尚硅谷】Git与GitLab的企业实战 学习笔记
  • 如何在MobaXterm上使用rz命令
  • 【计算机考研】408网课汇总+资源分享
  • 如何在OceanBase v4.2 中快速生成随机数据
  • nvm node.js的安装
  • 【Docker】安装Redis、Nginx
  • RK3568 UBUNTU修改网卡名称
  • 【华为OD机试C++】统计字符
  • 百货商场用户画像描绘and价值分析(下)
  • spring-cloud微服务gateway
  • 【python】在pycharm创建一个新的项目
  • java小作业(9)----用函数实现斐波那契数列(第二遍)
  • 部署项目的时候的一些错误
  • 1044: 顺序栈基本操作的实现
  • 微信小程序(总结)
  • C#医学实验室/检验信息管理系统(LIS系统)源码
  • Linux驱动编程-module_platform_driver注册platform_driver
  • 论文解读 --- 《针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测》
  • 在Spring Boot实战中碰到的拦截器与过滤器是什么?