cpython

对python源码进行编译,加密python脚本

跟風遠走 提交于 2020-11-24 03:26:31
对python源码进行编译 1.生成.pyc文件 import py_compile py_compile.compile('hello.py') 2.优化源码文件 python -O -m py_compile 1.py 生成.pyo文件 例子: 1 [root@lvs-master tool] # python3 2 Python 3.5.6 (default, May 3 2019, 01:52:28 ) 3 [GCC 4.8.5 20150623 (Red Hat 4.8.5-36 )] on linux 4 Type " help " , " copyright " , " credits " or " license " for more information. 5 >>> import py_compile 6 >>> py_compile.compile( ' test_conn_linux.py ' ) 7 ' __pycache__/test_conn_linux.cpython-35.pyc ' 8 >>> 9 >>> exit 10 Use exit() or Ctrl- D (i.e. EOF) to exit 11 12 # 执行部分 13 [root@lvs-master __pycache__ ] # python3 test_conn_linux

Python‘最难’的问题——GIL问题

前提是你 提交于 2020-11-23 23:59:43
[TOC] 一、什么是GIL GIL(解释器全局锁) 从名字上看能告诉我们很多东西,很显然,这是一个加在解释器上的全局(从解释器的角度看)锁(从互斥或者类似角度看)。 首先来看回顾一下什么是锁: 为什么加锁 由于多线程共享进程的资源和地址空间,因此,在对这些公共资源进行操作时,为了防止这些公共资源出现异常的结果,必须考虑线程的同步和互斥问题。 加锁的作用 1、用于非线程安全,2、控制一段代码,确保其不产生调度混乱。 GIL官方给出的解释 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) 在CPython中,全局解释器锁(global interpreter lock, GIL

用矩阵来处理数据—降维打击

南楼画角 提交于 2020-11-22 21:03:06
“同四维跌落到三维一样,三维空间也会向二维空间跌落,由一个维度蜷缩到微观中。那一小片二维空间的面积——它只有面积——会迅速扩大,这又引发了更大规模的跌落……我们现在就处在向二维跌落的空间中,最终,整个太阳系将跌落到二维,也就是说,太阳系将变成一副厚度为零的画。” 01 — 维度 上面引用了三体的一段话, 想 探讨一下维度的事情。 处理数据的时候,我们是习惯了将相同的性质的数据分门别类。 有个很有意思的事情,既然大部分人认为四维是指时间,那么为什么不能说每一种分类方式就是一个维度。 举个例子:注册规划师考四门,那就好比四个维度,有一百个注册规划师组成的列队,按他们原理、相关、法规、实务的分数进行排名,那就是四组数据;四组数据只能形成100行4列的二维矩阵;假设加上注册建筑师、注册结构师、注册暖通等等,又可以整理成一个三维矩阵;再按士、农、工、商等去区分,升级成一个四维矩阵。 因为有太多的数据在我们面前,还有一句话叫“选择大于努力”。最近的研究项里其实就是要在大量数据中找到最理想的那组数据,因此我写了不少代码,在数据的运算过程中又发现,如果要在合理的时间内做出计算,那还得提高计算的速度,那就得用到numba、cpython等。 02 — 数据扩充 选址大于努力的话,其实很多时候就是在做排列组合题。之前听东吴相对论里头有讲到,如果生活中有太多的事情压积在一起,那就先列举100件

从这里走进Python的世界

送分小仙女□ 提交于 2020-11-17 07:56:56
认识Python 人生苦短,我用Python Python的起源 解释器(科普) 计算机编程语言 解释型语言VS编译型语言 区别 性能方面 Python解释器 python程序执行过程: python解释器有很多种: 世界语言排行榜 人生苦短,我用Python ---Life is short,you need Python Python的起源 为什么要用Python? Python的特点 Python的优缺点 Python的起源 Python的创始人为 吉多.范罗苏姆(Guido van Rossum) 1.1989年的圣诞节期间,吉多.范罗苏姆(Guido van Rossum)为了在阿 姆斯特丹打发时间,决心开发一个新的 解释程序 ,作为ABC语言的一种继承( 感觉一下什么叫牛人 ) 2.ABC是由吉多参加设计的教学语言,就吉多本人来看,ABC这种语言非常优美和强大,是专门为非程序员设计的。但是ABC语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在Python中避免这一错误,并获得了非常好的效果。 3.之所以选中Python(蟒蛇)作为程序的名字,是因为他是BBC电视剧----蒙提.派森的飞行马戏团的爱好者。 4.1991年,第一个Python解释器诞生,它是用C语言实现的,并能够调用C语言的库文件 解释器(科普) 计算机编程语言 从计算机编程语言说起

再谈并发

a 夏天 提交于 2020-11-15 18:03:37
再谈并发 上一篇python并发中讲到了,使用多进程,多线程,多任务来加快程序的运行。其中讲到的一点似乎有点问题,操作系统中线程是调度器的最小执行单位,那为何python中的多线程无法利用多核,只能在一个处理器上运行呢?因为python中有GIL(全局解释器锁)这么个东西,当然它只是cpython解释器的一个特性,其他解释器可能没有。 大学时总在想,学操作系统、计算机组成原理、数据结构有啥用啊?还不如学习如何使用 hibernate 、 struts 、 spring 。当你工作3年后,对如何使用这些工具再也提不起兴趣时或者想深入了解它到底为什么是那样时,你就会重新回过头来打量大学时学的这些底层知识。 也许你对下面一句话耳熟能详: 进程是资源分配的最小单位,线程是最小执行单位。 大学时读的完全是字面意思啊?并没有思考什么是进程,为何要搞出来个进程?好吧,下面又是我杜撰的。 进程是一个操作系统级别的概念,运行一个程序时往往需要各种资源,操作系统把一个程序以及运行时所需要的资源抽象成一个进程,这里的资源是存储资源和计算资源。各个进程的计算资源是由操作系统的调度器统一分配的,而不是一个进程永远霸占计算资源;因为进程使用的是虚拟内存地址,不同进程的同一虚拟地址可能映射到了不同的物理内存上,所以不同进程间的存储资源是不共享的。 因为进程的储存资源不共享,创建销毁和切换的开销比较大

Python基础(十二)

梦想的初衷 提交于 2020-10-29 01:24:52
今日主要内容 推导式 生成器表达式 lambda匿名函数 内置函数介绍 一、推导式 (一)列表推导式 先来看一段代码 建立一个空列表,向空列表中添加元素 lst = list() for i in range(5): lst.append(i) print(lst) 运行结果: [0, 1, 2, 3, 4] 利用列表推导式,效果一样 lst = [i for i in range(5)] print(lst) 运行结果: [0, 1, 2, 3, 4] 循环模式: 格式: [元素 for 元素 in 可迭代对象] 执行流程:每次for循环将元素添加到列表中 lst = [i for i in range(5)] print(lst) 运行结果: [0, 1, 2, 3, 4] 筛选模式 筛选模式: 格式: [元素 for 变量 in 可迭代对象 if 条件] 执行流程:执行for循环并判断元素是否符合条件,将符合条件的元素添加到列表中 lst = [i for i in range(5) if i > 2] print(lst) 运行结果: [3, 4] (二)字典推导式 同理,先来看一段代码 建立一个空字典,向字典中添加键值对 dic = dict() for i in range(1, 5): dic[f"k{i}"] = i print(dic) 运行结果: {'k1':

02PyListObject: 列表对象的扩容机制

丶灬走出姿态 提交于 2020-10-28 14:36:17
list object 可变对象头 ob_item: 指向分配的空间,元素是指针 allocated: 真实容量. Objects/listobjects.c /* Ensure ob_item has room for at least newsize elements, and set * ob_size to newsize. If newsize > ob_size on entry, the content * of the new slots at exit is undefined heap trash; it's the caller's * responsibility to overwrite them with sane values. * The number of allocated elements may grow, shrink, or stay the same. * Failure is impossible if newsize <= self.allocated on entry, although * that partly relies on an assumption that the system realloc() never * fails when passed a number of bytes <= the number