进程数据隔离,守护进程,锁,信号量和事件
Posted ahliucong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程数据隔离,守护进程,锁,信号量和事件相关的知识,希望对你有一定的参考价值。
主要内容:
# Process
# 1.进程之间的数据隔离问题
# 2.守护进程
# 几个进程的模型 ---- 进程同步的工具
# 有先后顺序 就是同步
# 进程之间 就是异步
# 希望原本异步的多进程操作,维持一个顺序 -- 同步工具
# 3.锁 Lock *****
# 4.信号量 Semaphore ***
# 5.事件 Event **
1.进程之间的数据隔离问题
from multiprocessing import Process n = 100 def fun(): global n n -= 1 return n if __name__ == ‘__main__‘: p = Process(target=fun) p.start() print(n) """ # 进程与进程之间的数据是隔离的 # 内存空间是不能共享的 # 所以要想进行通信,必须借助其他手段 # 且这两个进程都是自愿的 # 子进程的执行结果父进程获取不到 # 父进程依赖子进程的执行结果呢 # 父进程如何获取子进程的执行结果??? # 父子进程之间通过socket通信 """
2.守护进程
# 设置成守护进程之后 会有什么效果呢?
# 守护进程会在主进程的代码执行完毕之后直接结束,无论守护进程是否执行完毕
from multiprocessing import Process import time def fun(): print("start") time.sleep(3) print("这是一个好天气") if __name__ == ‘__main__‘: p = Process(target=fun) p.daemon = True # 守护进程的属性,默认是False,如果设置成True,就表示设置这个子进程为一个守护进程 # 设置守护进程的操作应该在开启子进程之前 p.start() time.sleep(1) print("主进程结束了!") # 设置成守护进程之后 会有什么效果呢? # 守护进程会在主进程的代码执行完毕之后直接结束,无论守护进程是否执行完毕
关于守护进程的一个需要注意的点,示例如下:(注意下面的fun2里面的in fun2只运行了两次,是跟随主函数的)
import time from multiprocessing import Process def fun(): print("start") time.sleep(3) print("今天天气不错") def fun2(): while True: print("in fun2") time.sleep(0.5) if __name__ == ‘__main__‘: p = Process(target=fun) p.start() p = Process(target=fun2) p.daemon = True p.start() time.sleep(1) print("主程序结束了") """ 运行结果如下: in fun2 start in fun2 主程序结束了 今天天气不错 """
守扩应用主要有如下功能.:
# 报活 主进程还活着 # 100台机器 100个进程 10000进程 # 应用是否在正常工作 - 任务管理器来查看 # 守护进程如何向监测机制报活???send/写数据库 # 为什么要用守护进程来报活呢?为什么不用主进程来工作呢??? # 守护进程报活几乎不占用CPU,也不需要操作系统去调度 # 主进程能不能严格的每60s就发送一条信息
以上是关于进程数据隔离,守护进程,锁,信号量和事件的主要内容,如果未能解决你的问题,请参考以下文章
20190102(多线程,守护线程,线程互斥锁,信号量,JoinableQueue)
13 join 线程锁之LockRlock信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池