1、在CPU计算密集情况下,使用多进程;对于Python的每一个进程,Python会单独起一个解释器;
2、在I/O密集(读写密集,时间片会被挂起,进入阻塞,将时间片给了其他的进程去执行)的情况下,使用多线程;能用进程池使用进程池;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
python
一、基本数据类型
1、数字
2、浮点数
3、字符串
4、布尔booleans
二、容器(containers)
1、列表(lists):其实就是python中的数组;循环可以使用enumerate()
2、字典(dict):循环可以使用items()
3、集合(set):循环可以使用enumerate()
4、元组(tuples):循环可以使用enumerate()
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
python在数据科学方面需要用到的库:
1、Numpy:科学计算库(科学计算的核心库)提供矩阵运算的库;
2、Pandas:数据分析处理库,主要用于进行数据的采集与分析;
3、scipy:数值计算库.提供数值积分和常微分方程组求解算法(矩阵分析、信号分析、数理分析..);提供了一个非常广泛的特定函数集合;
4、Matplotlib:作图模块,结合其他数据分析模块,解决可视化问题;
5、Scikit-learn:机器学习库,强大的数据分析建模库,用于机器学习;
6、keras:人工神经网络,用于深度学习;
7、statsmodels:这个模块主要用于统计分析;
8、Gensim:这个模块主要用于文本挖掘;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
什么是Urllib?(urllib和urllib2是python标准库,就是你安装了python,这两个库就已经可以直接使用了;requests是第三方库,不是python基金会实现的,但是功能是很强大的)
Python内置的HTTP请求库(含四个模块):
1、urllib.request 打开和浏览url中内容
2、urllib.error 包含从 urllib.request发生的错误或异常
3、urllib.parse 解析url
4、urllib.robotparser 解析 robots.txt文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
python爬虫用到的库:
1、requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到(参考URL:https://blog.csdn.net/ChaseRaod/article/details/79856727);
2、Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
3、PhantomJS 是一个基于WebKit的服务器端JavaScriptAPI。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准:DOM 处理,CSS 选择器,JSON,Canvas和SVG。PhantomJS 可以用于 页面自动化,网络监测,网页截屏,以及无界面测试等;
4、lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高;
5、BeautifulSoup也是一个可以从HTML或XML文件中提取数据的Python库,依赖于lxml。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式;(BeautifulSoup4和lxml这两个库主要是解析html/xml文档,BeautifulSoup用来解析HTML 比较简单,API非常人性化,支持CSS选择器)
----------------------------------------------------------
用的框架
1、PySpider
2、Scrapy
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
pip3 install requests selenium beautifulsoup4 pyquery pymysql pymongo redis flask django jupyter
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
python的mutiprocess模块进程创建与资源回收的三种方式:
1、fork()
import os
pid = os.fork()
2、Process进程
import multiprocess as ms
ms.Process()
3、Pool 进程池
from multiprocess import Pool
p = Pool()
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
守护进程与守护线程的区别:
1. 线程与进程运行完毕的区别:
①主进程运行完毕指的是主进程代码运行完毕
②主线程运行完毕指的是所在的进程内的所有非守护线程运行完毕后,主线程才算运行完毕
③强调:运行完毕,并非是终止
2. 守护进程:主进程代码运行完毕,守护进程也就结束 (守护的是主进程)
①主进程要等非守护进程都运行完毕后再回收子进程的资源(否则会产生僵尸进程)才结束
主进程等子进程是因为主进程要给子进程收尸(代用wait方法向操作系统发起回收资源信号(pid号,状态信息))
3. 守护线程:非守护线程代码运行完毕,守护线程也就结束 (守护的是非守护线程)
①主线程在其他非守护线程运行完毕后才算结束(守护线程在此时就会被回收)
②强调:主线程也是非守护线程(进程包含了线程)
4. 总结:
①主线程的结束意味着进程结束,进程整体的资源都会被回收,而进程必须保证非守护线程都运行完毕后才能结束
②守护进程:主进程代码运行完毕,守护进程也就结束
③守护线程:非守护线程运行完毕,守护线程结束
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
multiprocessing.Queue() 和 queue.Queue区别
1、from queue import Queue
用于多线程队列,queue模块实现了多生产者,多消费者队列。在多线程环境下,该队列能实现多个线程间安全的信息交换。
2、from multiprocessing import Queue
用于跨进程通信队列。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
多进程multiprocess模块常引入的类:
1、Process:类用来描述一个进程对象。创建子进程的时候,只需要传入一个执行函数和函数的参数即可完成 Process 示例的创建。
2、Pool:可以提供指定数量的进程供用户使用,默认是 CPU 核数。当有新的请求提交到 Poll 的时候,如果池子没有满,会创建一个进程来执行,否则就会让该请求等待。
3、Queue:Queue 用来在多个进程间通信。Queue 有两个方法,get 和 put。
---------------------------------------------------------
线程Threading模块常用的类为:Thread
---------------------------------------------------------
队列queue模块(线程间通信)常用的三种队列:
1、queue.Queue() FIFO先进先出队列
2、queue.LifoQueue() LIFO先进后出
3、queue.PriorityQueue() 优先级队列级别越低越先出来
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
进程间通信总结:
(1)在多个进程中传递数据一般而言用队列就可以了,如果要快速高效的话,可以考虑共享内存;
(2)互斥量Lock主要用于在多个进程间加锁;
(3)在多个进程中传递信号可以用信号量Semaphore,事件Event;
(4)互斥量可以看做是特殊的信号量,是一个消费者只有一个物品的信号量;
(5)不同的进程通信方式有不同的优点和缺点,因此,对于不同的应用问题,要根据问题本身情况选择进程间通信的方式;
(6)为了高效:可以考虑:共享内存+信号量;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Python3 学习笔记
最新推荐文章于 2022-11-21 18:37:21 发布