一、进程补充:

1,生产者消费者模型:

  两类角色,一类负责生产数据,另外那类负责数据

  生产完放到共享空间,另外那类到空间取数据进行处理

  好处: 生产数据的同时可以进行数据的处理,不用等(并发效果)

  问题:要有共享空间(1.文件--硬盘,速度慢;2.内存)

     要有锁

  队列可以完美解决既是内存空间又自带加锁功能

2,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的

二、共享数据(了解,主要使用队列)

 1 from multiprocessing import Process,Manager,Lock
 2 def work(dic,mutex):
 3     with mutex:
 4         dic['count']-=1
 5
 6 if __name__ == '__main__':
 7     mutex=Lock()
 8     m=Manager()
 9     share_dic=m.dict({'count':100})
10     l_p=[]
11     for i in range(100):
12         p=Process(target=work,args=(share_dic,mutex))
13         l_p.append(p)
14         p.start()
15     for i in l_p:
16         i.join()
17     print(share_dic)

View Code

三、进程池(重要知识点)

1.进程池:放进程的池子 -- 控制进程的数量

2. n个cpu 开n个进程 效率最高

3.进程池可以指定大小,如不指定   默认是cpu的个数

4.应用

apply,忘记apply

弊端:apply效率低,串行--主程序要等一个程序运行完才能运行下一个

 1 from multiprocessing import Pool
 2 import time,os,random
 3 def task(n):
 4     print('%s is running'%os.getpid())
 5     time.sleep(random.randint(1,3))
 6     print('%s is done'%os.getpid())
 7     return n**2
 8
 9 if __name__ == '__main__':
10     p=Pool(4)
11     obj_l=[]
12     for i in range(1,7):
13         obj=p.apply_async(task,args=(i,))    #async提交的是任务 ,不是进程
14         obj_l.append(obj)
15     p.close()
16     p.join()
17     print('zhu')
18     for obj in obj_l:
19         print(obj.get())    #等进程都运行完,一起取结果   --   并发
20                         #如果运行完一个进程就取一个结果的话 和apply的效果是一个性质-- 串行

apply_async

#  p.close()      # 禁止往进程池内再添加任务

5. apply_async 的应用:

 1 from multiprocessing import Pool
 2 from socket import *
 3 s=socket(AF_INET,SOCK_STREAM)
 4 s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
 5 s.bind(('127.0.0.1',8088))
 6 s.listen(5)
 7 def talk(conn):
 8     while True:
 9         try:
10             cmd=conn.recv(1024)
11             if not cmd:break
12             conn.send(cmd.upper())
13         except Exception:
14             break
15     conn.close()
16
17 if __name__ == '__main__':
18     p=Pool(4)
19     while True:
20         conn,addr=s.accept()
21         p.apply_async(talk,args=(conn,))
22     s.close()
23                                              #不用考虑主进程等进程池的关闭

多进程并发通信

#也不用考虑返回值接收的问题

6.回调函数(属于主进程

应用场景:爬虫

 1 from multiprocessing import Pool
 2 import requests
 3 import os
 4 import time
 5 def get_page(url):
 6     print('<%s> is getting [%s]' %(os.getpid(),url))
 7     response=requests.get(url)
 8     time.sleep(2)
 9     print('<%s> is done [%s]' % (os.getpid(), url))
10     return {'url':url,'text':response.text}
11 def parse_page(res):
12     print('<%s> parse [%s]' %(os.getpid(),res['url']))
13     with open('db.txt','a') as f:
14         parse_res='url:%s size:%s\n' %(res['url'],len(res['text']))
15         f.write(parse_res)
16 if __name__ == '__main__':
17     p=Pool(4)
18     urls = [
19         'https://www.baidu.com',
20         'http://www.openstack.org',
21         'https://www.python.org',
22         'https://help.github.com/',
23         'http://www.sina.com.cn/'
24     ]
25     for url in urls:
26         p.apply_async(get_page,args=(url,),callback=parse_page)
27     p.close()
28     p.join()
29     print('主',os.getpid())

View Code

通常进程池的里面的任务是耗时间的,不耗时间(比进程池里的任务耗时短)的任务放到回调函数中

下载完就会调解析功能,节省时间

转载于:https://www.cnblogs.com/liuwei0824/p/7444615.html

python-day34--进程补充相关推荐

  1. Python创建进程、线程的两种方式

    代码创建进程和线程的两种方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  2. Python之进程线程

    进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...

  3. Python【进程和线程】保姆式教学,1个台机子多只手干活的秘籍

    进程线程有多重要?刚开始学Python的时候你可能还没有感觉到,因为你写的代码从上到下执行一遍就可以了,但实际上这很初级,实际开发写项目的时候,为了充分利用电脑配置来加快程序进度,我们往往会用到多进程 ...

  4. python之进程和线程的对比

    python之进程和线程的对比 1. 进程和线程的对比的三个方向 关系对比 区别对比 优缺点对比 2. 关系对比 线程是依附在进程里面的,没有进程就没有线程. 一个进程默认提供一条线程,进程可以创建多 ...

  5. Python实例浅谈之五Python守护进程和脚本单例运行

    一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...

  6. Python当前进程信息 (os包)

    Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. 进程 ...

  7. 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法

    在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...

  8. Python守护进程和脚本单例运行

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...

  9. python的进程线程和协程_python成长之路 :线程、进程和协程

    python线程 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分 ...

  10. 十一. Python基础(11)—补充: 作用域 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

最新文章

  1. 8种方案解决重复提交问题
  2. easyui的Pagination单独使用
  3. 绝对定位元素的百分比margin
  4. python中多维数组_python学习笔记-多维数组
  5. vscode中安装webpack_VSCode下手动构建webpack项目(示例代码)
  6. JDBCUtils类测试
  7. 迟到的,2016年终总结
  8. 阿里云盘内测_阿里云盘内测邀请码发放!30MB/s的下载速度
  9. canal 监控数据库表 快速使用
  10. 当前GitHub上排名前十的热门Vue项目
  11. 计算机电路基础 - 1,计算机电路基础1.1.doc
  12. 螺旋分级机与水力分级机间的优缺点
  13. Django文档学习
  14. Kubernetes之Secrets
  15. 图片资源加密,Lua文件加密详解
  16. 2021秋招学习笔记
  17. 【NOI2015模拟YDC】游戏
  18. OpenGL应用:天空盒子(SkyBox)
  19. 20个创意的产品包装设计
  20. 成功解决问题h5py\h5r.pyx, line 145, in init h5py.h5r AttributeError: type object 'h5py.h5r.Reference' ha

热门文章

  1. 打开终端输入没反应_忘掉Iterm2,试试这款跨平台终端工具
  2. Nginx一个server配置多个location
  3. scheduled只执行一次,有个定时任务突然不执行了?
  4. element UI表格使用cell-style改变单元格样式
  5. oracle分组后合并(wm_concat)其中一个字段
  6. 配置和使用APM功能和调用链分析功能
  7. 新微擎 v1.7.9 图文回复 标题emoji
  8. nginx 配置路由
  9. python如何使用web3py与以太坊投资智能合约交互
  10. Eclipse离线安装Emmet插件----web开发者绝对熟悉的插件之一