主要内容:
- # 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 就发送一条信息
来源: http://www.bubuko.com/infodetail-2699630.html