doraemon的python 守护进程和Process
### 9.4 Process模块 进程 ```python from multiprocess import Process p = Process(target=函数名,args=(参数1,))1.如何创建一个进程对象对象和进程之间的关系:a.进程对象和进程并没有直接的关系b.只是存储了一些和进程相关的内容c.此时此刻,操作系统还没有接收到创建进程的指令2.如何开启一个进程通过p.start()开启一个进程,这个方法相当于给操作系统一个开启指令指令start方法的异步非阻塞的特点:a.在执行这个方法的时候,我们既不等待进程开启,也不等待操作系统给我们的想要b.这里只是负责同志操作系统去开启一个进程开启一个子进程之后,主进程和子进程的代码完全异步3.父进程和子进程之间的关系a.父进程会等待子进程结束之后才结束b.是为了挥手子进程的资源4.不同操作系统中进程开启的方式windows 通过(模块导入)再一次执行父进程文件中的代码来获取父进程中的数据所以只要是不希望被子进程执行的代码,就写在if __name__ == '__main__'下因为在进行导入的时候父进程文件中的__name__ != '__main__'linux/ios正常的写就可以,没有if __name__ == '__main__'这件事情了 5.如何确认一个子进程执行完毕join方法开启了多个子进程,等待所有子进程结束```#### 9.4.1 守护进程 ```python def son1(a,b):while True:print('is alive')time.sleep(0.5)def son2():for i in range(5):print('in son2')time.sleep(1)if __name__ == "__main__":p = PROcess(target=son1,args=(1,2))p.daemon = Truep.start()p2 = Process(target=son2)p2.start()time.sleep(2)#守护进程是随着主进程的代码结束而结束 生产者消费者模型的时候守护线程做对比的时候 #所有子进程都必须在主进程结束之前结束,由主进程挥手资源 ``````python # 有一个参数可以把一个子进程设置为一个守护进程 import time from multiprocessing import Processdef son1():while True:print('is alive')time.sleep(0.5)if __name__ == '__main__':p = Process(target=son1)p.start() # 异步 非阻塞print(p.is_alive())time.sleep(1)p.terminate() # 异步的 非阻塞print(p.is_alive()) # 进程还活着 因为操作系统还没来得及关闭进程time.sleep(0.01)print(p.is_alive()) # 操作系统已经响应了我们要关闭进程的需求,再去检测的时候,得到的结果是进程已经结束了# 什么是异步非阻塞?# terminate ```#### 9.4.2 面向对象方式的守护进程#### 9.4.3 Process类的总结 ```python # Process类 # 开启进程的方式# 面向函数# def 函数名:要在子进程中执行的代码# p = Process(target= 函数名,args=(参数1,))#面向对象#class 类名(Process):#def __init__(self,参数1,参数2):#self.a = 参数1#self.b = 参数2#super().__init__()#def run(self):#需要在紫禁城中执行的代码#p = 类名(参数1,参数2)#p.start() 异步非阻塞#p.terminate() 异步非阻塞#p.join() 同步阻塞#p.isalive() 获取当前进程状态#daemon = True 设置为守护进程,守护进程会在主进程代码结束后结束 ```#### ### 9.5 锁#### 9.5.1 什么时候需要用锁- 如果在一个并发条件下,涉及的某部分内容- 是需要修改一些所有进程共享的数据资源- 需要枷锁类维持数据的安全 - 在数据安全的基础上,才考虑效率问题 - 同步存在的意义- 数据安全#### 9.5.2 锁在代码中的应用顺序- 在主进程中实例化lock = Lock() - 把这把锁传递给子进程 - 在子进程中 对需要枷锁的代码进行with lock:- with lock 相当于lock.acquire()和lock.release() - 在主进程需要加锁的场景:- 共享数据资源(文件、数据等)- 对资源进行修改删除操作 - 加锁之后能保证数据的安全性 但同时也降低了程序的执行效率```python import time import json from multiprocessing import Process,Lockdef search_ticket(user):with open('ticket_count') as f:dic = json.load(f)print('%s查询结果 : %s张余票'%(user,dic['count']))def buy_ticket(user,lock):# with lock:# lock.acquire() # 给这段代码加上一把锁time.sleep(0.02)with open('ticket_count') as f:dic = json.load(f)if dic['count'] > 0:print('%s买到票了'%(user))dic['count'] -= 1else:print('%s没买到票' % (user))time.sleep(0.02)with open('ticket_count','w') as f:json.dump(dic,f)# lock.release() # 给这段代码解锁def task(user, lock):search_ticket(user)with lock:buy_ticket(user, lock)if __name__ == '__main__':lock = Lock()for i in range(10):p = Process(target=task,args=('user%s'%i,lock))p.start() ```#### 9.5.3 进程之间的通信(IPC) ```python # 通信#进程之间的通信 - IPC(inter process communication)from multiprocessing import Queue,Process# 先进先出def func(exp,q):ret = eval(exp)q.put({ret,2,3})q.put(ret*2)q.put(ret*4)if __name__ == '__main__':q = Queue()Process(target=func,args=('1+2+3',q)).start()print(q.get())print(q.get())# print(q.get())# Queue基于 天生就是数据安全的# 文件家族的socket pickle lock # pipe 管道(不安全的) = 文件家族的socket pickle # 队列 = 管道 + 锁 ```
转载于:https://www.cnblogs.com/doraemon548542/p/11421654.html
doraemon的python 守护进程和Process相关推荐
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- Python守护进程和脚本单例运行
2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...
- Python守护进程daemon实现
1 守护进程 1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端 ...
- Python守护进程命令,再也不怕被整蛊了!
考虑一下利用Python制作一个整蛊.木马软件,我提供思路.(清楚到没学过编程的人也理解) 1.首先一个黑客做一个整蛊或者木马软件,一定不会让你能够关闭它. 2.里面经常会附带欺骗的方法. 3.最终实 ...
- Python创建进程类Process
1. Python创建进程类Process python的multiprocessing模块提供了一个创建进程的类Precess,其创建有以下两种方法: 创建Process类的实例,并指向目标函数和传 ...
- python守护进程进程池_Python3标准库:multiprocessing像线程一样管理进程
Python Python开发 Python语言 Python3标准库:multiprocessing像线程一样管理进程 1. multiprocessing像线程一样管理进程 multiproces ...
- python守护进程_Python实现守护进程
考虑如下场景:你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程.因此如果你关闭了终端,这个命令行程序也会随之关闭. 要使你 ...
- python守护进程进程池_Python—守护进程管理工具(Supervisor)
一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...
- 守护进程中创建的对象php,在PHP中生成守护进程(Daemon Process)
前两天看到一篇文章<如何使用PHP编写daemon process>,其中对核心代码却没有细说,我又查了一些资料,还看了一本<理解Unix进程>,才搞明白生成守护进程的时候发生 ...
最新文章
- Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
- 30 年开源老兵,10 年躬耕 OpenStack,开源 1000 万行核心代码
- SQLite判断表是否存在
- 字符串超长导致emWin卡死
- 深入理解prach的频域和时域数据
- 人,总要敢于直面自己的惨淡,才能挺直腰杆
- 利用iTextsharp进行PDF页码旋转
- 利用scrapy爬取句子迷网站优美句子存储到本地(喜欢摘抄的人有福了!)
- idea配置php开发环境以及配置debug
- 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + BH1750 + webserver(局域网内查看曲线变化图)
- https网站安全证书提示已过期怎么办?
- 数据分析Excel必备技能:数据透视表使用教程
- ai如何旋转画布_ai中怎么使用旋转工具制作旋转对称图?ai中使用旋转工具制作旋转对称图的方法...
- MP3Play项目实战 (1)
- 开源新手引导框架,支持TypeScript
- 五百年春光明媚之重建亚历山大图书馆谭
- linux中用参数代替键盘输入,linux shell在while中用read从键盘输入的实现
- Python获取时间戳
- ckfinder php 配置,PHP中Ckeditor+Ckfinder配置图片上传功能_PHP教程
- 从本地Excel文件下载数据