python 爬虫 多线程 多进程
一、程序、进程和线程的理解
程序:就相当于一个应用(app),例如电脑上打开的一个程序。
进程:程序运行资源(内存资源)分配的最小单位,一个程序可以有多个进程。
线程:cpu最小的调度单位,必须依赖进程而存在。线程没有独立资源,所有线程共享该进程的全部资源。线程的划分尺度比进程更小。
关系:
一个程序至少有一个进程,一个进程至少有一个线程.
资源:进程拥有独立资源,线程依赖于进程,没有独立资源,所有该进程的线程共享所在进程的所有资源。
划分尺度:线程的划分尺度小于进程(资源比进程少),使得多线程程序并发性更高。
优缺点:
线程:线程的执行开销小,但不利于资源的管理和保存。
进程:多个进程之间相互独立,不利于进程间信息交互。进程拥有独立资源。
在设计数据交互频繁的场景,多进程比多进程更加适合。
在并发程度上,多进程比多线程的效率更高。
二、如何通过多线程和多进程提高程序的运行速度?
a、提高程序的运行速度的第一种方法:提高cpu的利用率。
解决的方式:cpu不用休息就可以做到。
现在我们的程序一般只有一个主线程
如果在程序中遇到:阻塞。一旦阻塞了,cpu就休息了。休息的这段时间,就浪费了cpu的资源。
有两种方式可以阻塞:1、time.sleep() 2、遇到io操作
多线程:多个任务。cpu会在这多个任务之间切换,如果其中一个线程阻塞了,cpu不会休息,会处理其他线程。
b、提高程序运行速度第二种方法:增加cpu处理的个数,让每个cpu处理一个任务。
cpu是多核的。---利用cpu的多核进行解决。---cpu每一个核处理一个进程。--用多进程去处理。
c、并发和并行。
三、Python中的threading模块
1、开启多线程
a、使用threading模块
b、 使用自定线程类的形式来创建线程
1、需要继承threading.Thread
2、保证父类的init方法能够被调用
3、步骤
继承Thread
重写run方法
实例化线程类,就相当于创建一个线程,用这个对象调用start()方法就可以启动这个线程
如果自定义线程类要实现init方法,必须先调动父类的init方法。
2、查看线程的名称
使用线程对象.name查看(默认是Thread-1,Thread-2....)
自定义名称:其实就是给self.name赋值
3、查看线程的数量
threading.enumerate()--可以查看当前进程中的线程的数量
python 爬虫 多线程 多进程的更多相关文章
- 静听网+python爬虫+多线程+多进程+构建IP代理池
目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip ...
- python进阶--多线程多进程
一.线程和进程 进程是拥有独立内存,能够独立运行的最小单位,也是程序执行的最小单位,线程是程序运行过程中,一个单一的顺序控制流程,是程序执行流的最小单位,一个进程至少包含一个线程,多线程共享进程的内存 ...
- Python爬虫 | 多线程、多进程、协程
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了 ...
- python爬虫——多线程+协程(threading+gevent)
上一篇博客中我介绍了如何将爬虫改造为多进程爬虫,但是这种方法对爬虫效率的提升不是非常明显,而且占用电脑cpu较高,不是非常适用于爬虫.这篇博客中,我将介绍在爬虫中广泛运用的多线程+协程的解决方案,亲测 ...
- Python之多线程多进程
(一)进程 1.定义 进程:就是一组资源的集合.一个程序就是一个进程. 线程是用来干活的,只有进程的话是没办法运行的,进程里其实是线程在具体干活的. import threading import t ...
- sumafan:python爬虫多线程爬取数据小练习(附答案)
抓取 https://www.cnbeta.com/ 首页中新闻内容页网址, 抓取内容例子: https://hot.cnbeta.com/articles/game/825125 将抓取下来的内容页 ...
- python爬虫多线程编程
#使用了线程库 import threading from queue import Queue from bs4 import BeautifulSoup import json import re ...
- Python爬虫教程
Python爬虫(1):基本原理 Python爬虫(2):Requests的基本用法 Python爬虫(3):Requests的高级用法 Python爬虫(4):Beautiful Soup的常用方法 ...
- python爬虫入门八:多进程/多线程
什么是多线程/多进程 引用虫师的解释: 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期. 进程(有时被称为重量级进程)是 ...
随机推荐
- UVA - 10129 Play on Words(欧拉回路)
题意:将n个单词排成一个序列,保证相邻单词相邻处字母相同. 分析:每个单词看做一条有向边,字母为点,并查集看图是否连通,因为是有向图,所以最多只能有两个点入度不等于出度,且这两个点一个入度比出度大1, ...
- 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群
在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...
- Spring源码分析——(001)环境搭建
1.官方参考 spring-framework的github链接:https://github.com/spring-projects/spring-framework 源码环境搭建官方参考1:考如何 ...
- 竟然把Ruoyi在我自己的Eclipse编译成功,并能跑通了。。。。服了我自己了
前几天,下载最新ECLISPSE2019压缩包,解压缩成功,没提示不是免费:eclipse-jee-2019-12-R-win32-x86_64.zip然后我配置好了maven于是我1月2日晚一时兴起 ...
- HDU_4960 2014多校9 Another OCD Patient DP
其实现在想起来是个巨简单的DP,模型就跟LCS很像,比赛的时候居然没想出来,在聪哥提醒下还卡了个地方 就是说给定一串n个数字的序列,可以连续合并,最终使得序列是回文的,题目也给定了合并数字所需的代价, ...
- scala 语言特性
Scala 语言特性 Unit 表示无值, 等价于java, C++中的void Null 表示空值或空引用 Nothing 所有其他类型的子类型, 表示没有值 Any 所有类型的超类, 任何实例都属 ...
- Bulma CSS - CSS类
Bulma CSS框架教程 Bulma CSS – 简介 Bulma CSS – 开始 Bulma CSS – CSS类 Bulma CSS – 模块化 Bulma CSS – 响应式 Bulma是一 ...
- 仿淘宝 vue
最近自己闲着无聊,用vue仿照淘宝打算写个皮囊,顺便把遇到的问题顺便记录下 1.动画问题 (1)单个元素给动画 <transition name="fade">< ...
- MFC OCX 控件事件的添加和处理
1.控件的事件一般都是由对外的接口引发到,这里定一个接口先: 该接口有一个字符串参数,表示调用者将传入一个字符串,传进来后,我们将取得字符串的长度. 2.添加事件: 事件应该是属于窗口的,所以在Ctr ...
- Express ~ 获取表单 get 和 post 提交方式传送参数的对比
一,获取 get 提交的参数 var id = req.query.id || '' 二,获取 post 提交的参数 var name = req.body.name || ''