Python的GIL
简介 熟悉Python的人理应都听过GIL(Global Interpreter Lock,全局解释器锁) ,大概也知道它就是造成Python多线程并发其实是「伪并行」的核心原因,但依旧很多人没有深入其中,所以HackPython尝试以上、下两篇文章来阐释GIL,分别从其表现现象、对应源码以及Python对GIL改进等方面进行讨论
Python多线程的伪并行 Python中可以使用「threading」模块来创建并使用多线程,为了直观比较,先试一下一个没有使用多线程的代码 ,如下:
import time def add(n): sum = 0 while sum <= n: sum +=1 print(f'sum:{sum}')if __name__ =='__main__': start = time.time() add(500000000) print('run time: %s'%str(time.time()- start) ...
BIOS详解
之前了解过BIOS相关内容,也重装过系统,拆过笔记本,装过硬件,今天对这方面知识进行详细记录
软件安利 diskgenius:查看磁盘分区情况
ghost:备份磁盘
WEPE:纯洁pe系统制作软件
Rufus:烧写镜像
Lenovo y7000p为例介绍BIOS(Boot) BIOS是计算机开机执行的第一个程序,用于开机硬件自检,并引导启动操作系统
information:这个界面是对电脑的一些介绍,包括 SYS MEMORY、HARD DISK、SSD、CPU、 ETC…… UUID number:通用唯一识别码 OA3 KEY ID :主板密钥
configuration:这个界面是对电脑的设置,包括 SYS TIME、SYS DATE、WIRELESS LAN ETC…… Graphic Device :discrete graphics 独立显卡
SECURITY:这个界面是安全相关的,包括 PASSWORD、SECURE BOOT ETC…… CSM:ENABLE=兼容 UEFI AND BIOS DISABL ...
电脑cpu的插槽,内核,逻辑处理器概念详解
CPU CPU(Central Processing Unit)是中央处理单元
物理CPU,物理CPU内核,逻辑CPU
一个物理CPU可以有1个或者多个物理内核
一个物理内核可以作为1个或者2个逻辑CPU
物理CPU 物理CPU就是计算机上实际安装的CPU,物理CPU数就是主板上实际插入的CPU数量
在Linux上查看/proc/cpuinfo,其中的physical id就是每个物理CPU的id,有几个不同的physical id就有几个物理CPU
物理CPU内核 每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU的内核数都是固定的
单核CPU就是有1个物理内核,双核CPU就是有2个物理内核
在Linux上查看/proc/cpuinfo,其中的core id就是每颗物理CPU的物理内核id,有几个不同的core id就有几个物理内核
总的CPU物理内核数 = 物理CPU数 * 每颗物理CPU的内核数
逻辑CPU 操作系统可以使用逻辑CPU来模拟真实CPU
在没有多核处理器的时候,一 ...
不同主流深度学习框架对比
近几年,随着深度学习指数级发展,深度学习的框架使用在人工智能领域也起着举足轻重的作用,这其中包括Tensoflow、Pytorch、Keras、Caffe等等
那么面对这些框架,究竟使用哪个呢?
答:其实,这几个框架都有各自的优点,大家了解后可以根据自己的情况进行选择;下面我们就来看看吧!!(本文纯属是唠唠嗑的,想直接知道自己适合使用哪种框架的,可以直接滑倒文末看结论 )
Tensoflow TensorFlow由Google智能机器研究部门Google Brain团队研发的;TensorFlow编程接口支持Python和C++。随着1.0版本的公布,相继支持了Java、Go、R和Haskell API的alpha版本。
在2017年,Tensorflow独占鳌头,处于深度学习框架的领先地位;但截至目前已经和Pytorch不争上下。
Tensorflow目前主要在工业级领域处于领先地位。
Pytorch Pytorch目前是由Facebook人工智能学院提供支持服务的。
Pytorch目前主要在学术研究方向领域处于领先地位。
其优点在于:PyTorch可 ...
Python的struct模块
python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~。一般输入的渠道来源于文件或者网络的二进制流。
struct模块中最重要的三个函数是pack(), unpack(), calcsize()
# 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)pack(fmt, v1, v2, ...)# 按照给定的格式(fmt)解析字节流string,返回解析出来的tupleunpack(fmt, string) # 计算给定的格式(fmt)占用多少字节的内存calcsize(fmt)
上述fmt中,支持的格式为:
FORMAT
C TYPE
PYTHON TYPE
STANDARD SIZE
NOTES
x
pad byte
no value
c
char
string of length 1
1
b
signed char
integer
1
(3)
B
unsigned char
integer
...
.gitignore写法
语法.gitignore语法:
以”#”号开头表示注释;以斜杠“/”开头表示目录;以星号“*”通配多个字符;以问号“?”通配单个字符以方括号“[]”包含单个字符的匹配列表;以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
注:/在文件夹名前,表示根目录下的某个文件夹,/test/表示忽略根目录下的/test/目录的全部内容,而test/表示忽略文件夹test下的全部内容,不管是根目录下的/test/,还是某个子目录下的test文件夹,比如:/child/test,都会被忽略
用法 下面演示下gitignore规则的常用用法
*.txt ,*.xls 表示过滤某种类型的文件target/ :表示过滤这个文件夹下的所有文件/test/a.txt ,/test/b.xls 表示指定过滤某个文件下具体文件!*.java , !/dir/test/ ...
Python绘制3D图
最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感
三维的线图和散点图#绘制三角螺旋线from mpl_toolkits import mplot3d%matplotlib inlineimport matplotlib.pyplot as pltimport numpy as npax = plt.axes(projection='3d')#三维线的数据zline = np.linspace(0, 15, 1000)xline = np.sin(zline)yline = np.cos(zline)ax.plot3D(xline, yline, zline, 'gray')# 三维散点的数据zdata = 15 * np.random.random(100)xdata = np.sin(zdata) + 0.1 * np.random.randn(100)ydata = np.cos(zdata) + 0.1 ...
Python装饰器
简单来讲,装饰器就是为了不修改原函数内容,在原函数(内函数)基础上增添新的功能(外函数)。通常是在函数内定义函数,内部为内函数,外部为外函数,先执行内函数,后执行外函数。通常用语法糖@function的形式作为外函数装饰内函数。
装饰器的定义 装饰器 ,英文称之为decorator。
我们开发Python代码,会经常碰到装饰器。
Python中装饰器通常用来装饰函数、或者类的方法。
通常被装饰后的函数, 会在原有的函数基础上,增加一点功能。
比如 前面我们在学习到类里面的静态方法,就是使用了staticmethod 这个装饰器,被装饰的方法 就增加了一层含义,表示这个方法是个静态方法。
通常装饰器本身是也一个函数。 那么装饰器是怎么装饰另外的函数的呢?
假设你进入一个公司,领导要求你在老代码的基础上继续开发。
假设代码里面有好多函数,都是返回时间的,比如像下面这样。
import timedef getXXXTime(): print() return time.strftime('%Y_%m_%d %H:%M:%S', ...
Python多线程与多进程
自我理解 简单的说:进程就是运行着的程序。
我们写的python程序(或者其他应用程序比如画笔、qq等),运行起来,就称之为一个进程
在windows下面打开任务管理器,里面显示了当前系统上运行着的进程。可以看到,我们系统中有很多的进程运行着,比如qq、搜狗输入法等。这些程序还没有运行的时候,它们的程序代码文件存储在磁盘中,就是那些扩展名为 .exe 文件。双击它们,这些 .exe 文件就被os加载到内存中,运行起来,成为进程
而系统中每个进程里面至少包含一个 线程 。线程是操作系统创建的,每个线程对应一个代码执行的数据结构,保存了代码执行过程中的重要的状态信息。没有线程,操作系统没法管理和维护 代码运行的状态信息。所以没有创建线程之前,操作系统是不会执行我们的代码的。
我们前面写的Python程序,里面虽然没有创建线程的代码,但实际上,当Python解释器程序运行起来(成为一个进程),OS就自动的创建一个线程,通常称为主线程,在这个主线程里面执行代码指令。当解释器执行我们python程序代码的时候。 我们的代码就在这个主线程中解释执行。
现代计算机上面,CPU是 ...
Python数据可视化Seaborn
Reference:https://zhuanlan.zhihu.com/p/49035741
- 为什么用 Seaborn -
Seaborn 是基于 Python 且非常受欢迎的图形可视化库,在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形。
Seaborn 可以实现 Python 环境下的绝大部分探索性分析的任务,图形化的表达帮助你对数据进行分析,而且对 Python 的其他库(比如 Numpy/Pandas/Scipy)有很好的支持。
- Seaborn 绘图上手 -
安装 Matplotlib, Seaborn
pip install matplotlibpip install seaborn
先来一段基本的代码:
import seaborn as sns # 导入绘图模块import matplotlib.pyplot as plt%matplotlib inline # 这里的 “%matplot inline” 是为了在 ...