python并发编程(守护进程,进程锁,进程队列)
2019-01-11 08:35:29来源:博客园 阅读 ()
进程的其他方法
P = Process(target=f,)
P.Pid 查看进程号 查看进程的名字p.name
P.is_alive() 返回一个true或者False
P.terminate() 给操作系统发送一个结束进程的信号
验证进程之间是空间隔离的
from multiprocessing import Process num = 100 def f1(): global num num = 3 print(num) # 结果 3 if __name__ == '__main__': p = Process(target=f1,) p.start() p.join() print(num) # 结果 100
守护进程
主进程的代码运行完毕设置为守护进程的子进程会随之结束
P.daemon = True
import time from multiprocessing import Process def f1(): time.sleep(3) print('xxxx') def f2(): time.sleep(5) print('普通子进程的代码') if __name__ == '__main__': p = Process(target=f1,) p.daemon = True p.start() p2 = Process(target=f2,) p2.start() print('主进程结束') # 守护进程会跟跟着父进程的代码运行结束,就结束
进程锁
数据共享 manager
多进程操作共享数据(文件内容)的时候,会造成数据不安全的问题
保证数据安全,但是牺牲了效率,加锁的这段代码大家变成了(同步)串行执行的状态,又叫同步锁\互斥锁
两种锁的方式
l = Lock()
1).with l:
锁中内容
2).
l.acquire()
锁中内容
l.release()
import time from multiprocessing import Process,Manager,Lock def f1(m_d,l2): with l2: # l2.acquire() tmp = m_d['num'] tmp -= 1 time.sleep(0.1) m_d['num'] = tmp # l2.release() if __name__ == '__main__': m = Manager() l2 = Lock() m_d = m.dict({'num':100}) p_list = [] for i in range(10): p = Process(target=f1,args=(m_d,l2)) p.start() p_list.append(p) [pp.join() for pp in p_list] print(m_d['num'])
队列
Queue()
Q = Queue(10)
Q.put() 放数据
Q.get() 取数据
Q.qsize() 返回的是当前队列中内容的长度
Q.put_nowait() 不等待,但是报错
Q.get_nowait() 不等待,也是报错
Q.full() q.empty()
用队列实现消费者生产者模型 : 缓冲用,解耦用的,
import time from multiprocessing import Process,Queue,JoinableQueue
#生产者 def producer(q): for i in range(10): time.sleep(0.2) s = '大包子%s号'%i print(s+'新鲜出炉') q.put(s) q.join() #就等着task_done()信号的数量,和我put进去的数量相同时,才继续执行 print('所有的任务都被处理了') #消费者 def consumer(q): while 1: time.sleep(0.5) baozi = q.get() print(baozi+'被吃了') q.task_done() #给队列发送一个取出的这个任务已经处理完毕的信号 if __name__ == '__main__': # q = Queue(30) q = JoinableQueue(30) #同样是一个长度为30的队列 pro_p = Process(target=producer,args=(q,)) con_p = Process(target=consumer,args=(q,)) pro_p.start() con_p.daemon = True con_p.start() pro_p.join() print('主进程结束')
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash