python进程数上限_python多进程数量对爬⾍程序的影响
1. ⾸先看⼀下 python 多进程的优点和缺点
多进程优点:
1.稳定性好: 多进程的优点是稳定性好,⼀个⼦进程崩溃了,不会影响主进程以及其余进程。基于这个特性,常常会⽤多进程来实现守护服务器的功能。
然⽽多线程不⾜之处在于,任何⼀个线程崩溃都可能造成整个进程的崩溃,因为它们共享了进程的内存资源池。
2.能充分利⽤多核cpu: 由于python设计之初,没预料到多核cpu能够得到现在的发展,只考虑到了单核cpu。为了更好的实现多线程之间数据完整性与状态同步,
于是设计出了⼀个全局解析器锁(GIL, global interpreter lock)。
GIL确保Python进程⼀次运⾏⼀个线程(其它线程处于等待I/O或者睡眠状态),⽆论当前cpu有多少核⼼。这就意味着Python虽然可以实现多线程,
但是在任意时间点仅有⼀个核⼼在执⾏Python指令(即线程⽆法并⾏运算),⽆法发挥现代多核cpu的性能。⽽多进程可以利⽤多核cpu。
多进程缺点:
1. 创建进程的代价⾮常⼤: 因为操作系统要给每个进程分配固定的资源,并且操作系统对进程的总数会有⼀定的限制,若进程过多,操作系统调度都会存在问题,会造成假死状态。
2. 进程间通信成本⾼: 每个进程都有⾃⼰独⽴的内存空间,不同进程之间的内存空间不共享。进程之间的通信有操作系统传递,导致通讯效率低,切换开销⼤。
通信主要通过信号传递的⽅式来实现(实现⽅式有多种,信号量、管道、事件等,通讯都需要过内核,效率低)
3. 切换开销⼤: 上下⽂切换的时候需要保存栈、cpu寄存器、虚拟内存、以及打开的相关句柄等信息,开销⼤。
大淘客4. 耗内存: python 使⽤multiprocessing来创建多进程时,⽆论数据是否不会被更改,⼦进程都会复制⽗进程的状态(内存空间数据等)。
如果主进程耗的资源较多时,不⼩⼼就会造成不必要的⼤量的内存复制,从⽽可能导致内存爆满的情况。
⼆: 测试服务器情况:
cpu是12核⼼,内存是128G
三:测试⽬的:
测试⽬的是因为多进程 切换开销⼤,创建进程的代价⼤,通过开不同的进程数量,测试是否会出现进程开的越多,爬⾍的速度越慢的情况。
四:测试软件条件:
1. ⽤10000个关键词,去爬取微博的搜索接⼝,通过开不同的进程数据,评估爬⾍耗时情况。
五: 测试过程:
2 .开32个多进程爬⾍耗时情况:
程序耗时:爬虫软件 app
3 .开64个多进程爬⾍耗时情况:
程序耗时:
4 .开128个多进程爬⾍耗时情况:
程序耗时:
5 .开256个多进程爬⾍耗时情况:
程序耗时:
6 .开512个多进程爬⾍耗时情况:sqlmap基本使用
程序耗时:
7 .开768个多进程爬⾍耗时情况:
程序耗时:
8 .开1024个多进程爬⾍耗时情况:
程序耗时:
畅学编程网站首页六. 数据统计分析:
七. 结论:多进程数据量在512⼀下,对程序的提速还是很明显,因为多进程耗内存,所以注意内存的优化。
⽤了python多进程,我跑程序花费的时间缩短了4倍
应⽤场景:本⼈需要对200万条⽹页html格式数据进⾏清洗,提取⽂字后将分词结果写⼊数据库,之前做了⼀次,⼤概花费了80多个⼩时才跑完.机器配置是4核,内存8G:开完会领导让再改点东西重新跑⼀遍,然后 ...
使⽤Python制作第⼀个爬⾍程序
⽤到的开发环境 IDE:pycharm python version :2.7 掌握的知识: Pycharm 还能更改Python的版本 代码如下:(重点就是 正则表达式的学习) # !/u ...
python爬⾍__第⼀个爬⾍程序
前⾔ 机缘巧合,最近在学习机器学习实战, 本来要⽤python来做实验和开发环境 得到⼀个需求,要爬取⼤众点评中的⼀些商户信息, 于是开启了我的第⼀个爬⾍的编写,⾥⾯有好多⼼酸,主要是第⼀次. 我的⽂ ...
python爬⾍程序
开发记录_⾃学Python写爬⾍程序爬取csdn个⼈博客信息
每天刷开csdn的博客,看到⼀整个页⾯,其实对我⽽⾔,我只想看看访问量有没有上涨⽽已... 于是萌⽣了⼀个想法: 想写⼀个爬⾍程序把csdn博客上边的访问量和评论数都爬下来. 打算通过⽹络各种搜集资料 ...
第⼀个python爬⾍程序
⼀个简单的python爬⾍程序
python|⽹络爬⾍ 概述 这是⼀个简单的python爬⾍程序,仅⽤作技术学习与交流,主要是通过⼀个简单的实际案例来对⽹络爬⾍有个基础的认识. 什么是⽹络爬⾍ 简单的讲,⽹络爬⾍就是模拟⼈访问web ...
我的第⼀个爬⾍程序:利⽤Python抓取⽹页上的信息
题外话 我第⼀次听说Python是在⼤⼆的时候,那个时候C语⾔都没有学好,于是就没有⼼思学其他的编程语⾔.现在,我的毕业设计要⽤到爬⾍技术,在⽹上搜索了⼀下,Python语⾔在爬⾍技术这⽅⾯获得⼀致好 ...
Python 多进程爬⾍实例
Python 多进程爬⾍实例 import json import re import time from multiprocessing import Pool import requests f ...
nodejs安装express随机推荐
问题解决——ShowWindow不显⽰窗⼝
配合任务栏通知区域. //MFC对话框程序 void CXXXDlg::OnShowHideUi() { // TODO: 在此添加命令处理程序代码
m_bShown=!m_bShown; ShowW ...
C++——string类和标准模板库
⼀.string类 1.构造函数 string实际上是basic_string的⼀个typedef,同时省略了与内存管理相关的参数.size_type是⼀个依赖于实现的整型,是 ...
发布⼀个 mvc站点遇到的问题及解决
1.先通过vs2012发布 mvc项⽬,遇到问题是⼀路默认下来,提⽰发布已成功,但对应⽂件夹⾥没有任何⽂件 解决: 第⼀步,新建了⼀个⽂件夹 第⼆步,在[配置⽂件]步骤,新建配置⽂件 第三步, ...
2016MBA排名
2016全球商学院100强 2016上半年度最受欢迎的⼗⼤MBA排名 ⽹上评选出上年度最受欢迎的⼗⼤MBA排名,有你想要报考的院校吗?快来⼀睹这些MBA院校的风采,选择好适合⾃⼰的院校项⽬. 第1名 ...
iOS开发中的测试框架 (转载)
hdu4488 Faulhaber’s Triangle(模拟题)
Faulhaber’s Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
linux编程基础汇总贴
springboot~hazelcast缓存中间件
缓存来了 在dotnet平台有⾃⼰的缓存框架,在java springboot⾥当然了集成了很多,⽽且缓存的中间件也可以进⾏多种选择,向redis, hazelcast都是分布式的缓存中间件,今天主要 ...
JSONP和CORS两种跨域⽅式的优缺点及使⽤⽅法原理介绍
随着软件开发分⼯趋于精细,前后端开发分离成为趋势,前端同事负责前端页⾯的展⽰及页⾯逻辑处理,服务端同事负责业务逻辑处理同时通过API为前端提供数据也为前端提供数据的持久化能⼒,考虑到前后端同事开发⼯具 ...
Vue源码解析---数据的双向绑定
英语翻译中文转换器在线翻译本⽂主要抽离Vue源码中数据双向绑定的核⼼代码,解析Vue是如何实现数据的双向绑定 核⼼思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论