![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
蜉蝣之羽,衣裳楚楚
虽千万人吾往矣
展开
-
Python 阻塞型I/O和GIL
GIL 几乎对 I/O 密集型处理无害CPython 解释器本身就不是线程安全的,因此有全局解释器锁(GIL), 一次只允许使用一个线程执行 Python 字节码。这是 CPython 解释器的局限,与 Python 语言本身无关。Jython 和 IronPython 没有这种限制。 不过,目前最快的 Python 解释器 PyPy 也有 GIL。标准库中所有执行阻塞型 I/O 操作的函数,在等待操作系统返回结果时都会释放GIL。这意味着在 Python 语言这个层次上可以使用多线 程,而 I原创 2021-01-23 21:54:23 · 258 阅读 · 0 评论 -
Python 使用future处理并发
Python标准库的两个Future1. concurrent.futures.Future2.asyncio.Future这两个类作用相同,都表示可能已经完成或尚未完成的延迟计算。future封装待完成的操作,可以放入队列,完成的状态可以查询,得到结果后可以获取结果。两种Future的几种常用方法:.done(),这个方法不阻塞,返回值是bool值,指明future连接的可调用对象是否已经执行 .adddonecallback(),这个方法只有一个参数,类型是可调用的对象,future运原创 2021-01-23 21:53:46 · 905 阅读 · 0 评论 -
python 协程二
1 使用协程实现移动均值函数>>> from inspect import getgeneratorstate as gs>>> def mean_coroutine():... total = 0... count = 0... average = None... while True:... val = yield average... total += val... count += 1...原创 2021-01-02 15:10:17 · 93 阅读 · 0 评论 -
python 协程一
协程,又称微线程,纤程,英文名Coroutine。协程使用生成器定义:定义体中含有yield关键字>>> from inspect import getgeneratorstate # ①>>> def coroutine():... print("step one")... x = yield ... print("step two x value :", x)... &g原创 2021-01-02 15:06:43 · 124 阅读 · 1 评论 -
Python 上下文管理器和with块 二
标准库中还有个contextlib 模块,提供一些实用工具,closing 如果对象提供了 close() 方法,但没有实现 __enter__/__exit__ 协议,那么可以使用这个函数构建上下文管理 器。 @contextmanager 这个装饰器把简单的生成器函数变成上下文管理器,这样就不用创 建类去实现管理器协议了。 ExitStack 这个上下文管理器能进入多个上下文管理器。例如,同时打开任意一个文件列表中的所有文件。 下面展开介绍下@contextmanager...原创 2021-01-02 11:29:08 · 158 阅读 · 0 评论 -
Python 上下文管理器和with块 一
上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子句)是在上下文管理器对象上调用 __enter__ 方法的结果 with语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法,with 语句运行结束后,会在上下文管理器对象上调用__exit__方法。不管控制流程以哪种方式退出 with块,都会在上下文管理器对象上调用__exit__方原创 2021-01-02 10:50:57 · 224 阅读 · 3 评论 -
Python if之外的else块
通常if/else连起来使用,要么做这个,要么做那个。不过else还可以跟while/for/try连起来使用,表示先做这个,再做那个。for仅当 for 循环运行完毕时(即 for 循环没有被 break 语句中止) 才运行 else块>>> for i in [1,2,3]:... if i == 2:... break... else:... print("else content")... # for 被break,所以没有执行e原创 2020-12-28 00:20:43 · 432 阅读 · 1 评论 -
Python 解释器
一句话定义就是,解释器是代码与计算机硬件之间的软件逻辑层python代码执行过程: 源代码*.py文件编译成字节码.pyc文件 将.pyc文件转发到所谓的“虚拟机(PVM)”中 下面简单介绍下上述两个步骤, 字节码编译 编译是一个简单的翻译过程,字节码是源代码底层的,与平台无关的表现形式 如果源码(*.py)没有改动,执行过程会直接使用字节码(*.pyc);如果发生改动,字节码文件将被重建 如果机器上不允许写入字节码,程序仍然可以工作,*.pyc文件会在内存中被创建,程序结束后原创 2020-12-26 22:19:10 · 117 阅读 · 1 评论 -
Pytorch hook(钩子函数)
# example # 定义用于获取网络各层输入输出tensor的容器,并定义module_name用于记录相应的module名字module_name = []features_in_hook = []features_out_hook = []# hook函数负责将获取的输入输出添加到feature列表中,并提供相应的module名字# fea_in当前forward 的输入,fea_out当前forward的输出def hook(module, fea_in, fea_out): .原创 2020-12-26 18:31:49 · 440 阅读 · 0 评论 -
协程 Python yield
协程,又称微线程,纤程。英文名Coroutine。 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。 协程是一个线程执行 Python对协程的支持还非常有限,用在generator中的yield可以一定程度上实现协程 import timedef consumer(): r = '' while True: n = yield r if not n:原创 2020-12-26 18:14:07 · 101 阅读 · 0 评论 -
python 常用内置函数
__getitem__ 支持对象可迭代 __setitem__ 支持可变序列协议 __iter__ 返回 self,以便在应该使用可迭代对象的地方使用迭代器,例如在 for 循环中 __getattr__ __setattr__ __repr__ 以便于开发者理解的方式返回对象的字符串表示形式 __str__ 以便于用户理解的方式返回对象的字符串表示形式 __len__ __eq__ __hash_ 创建可散列的类..原创 2020-12-25 00:39:32 · 103 阅读 · 3 评论 -
python __call__
__call__()的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()不影响一个实例的构造和析构),但是__call__()可以用来改变实例的内部成员的值。class X(object): def __init__(self, a, b, range): self.a = a self.b = b self.range = range def __call__(self, a, b):原创 2020-12-24 23:57:15 · 53 阅读 · 0 评论