自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 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 248

原创 Python 使用future处理并发

Python标准库的两个Future1. concurrent.futures.Future2.asyncio.Future这两个类作用相同,都表示可能已经完成或尚未完成的延迟计算。future封装待完成的操作,可以放入队列,完成的状态可以查询,得到结果后可以获取结果。两种Future的几种常用方法:.done(),这个方法不阻塞,返回值是bool值,指明future连接的可调用对象是否已经执行 .adddonecallback(),这个方法只有一个参数,类型是可调用的对象,future运

2021-01-23 21:53:46 833

原创 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 92

原创 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 121 1

原创 Python 上下文管理器和with块 二

标准库中还有个contextlib 模块,提供一些实用工具,closing 如果对象提供了 close() 方法,但没有实现 __enter__/__exit__ 协议,那么可以使用这个函数构建上下文管理 器。 @contextmanager 这个装饰器把简单的生成器函数变成上下文管理器,这样就不用创 建类去实现管理器协议了。 ExitStack 这个上下文管理器能进入多个上下文管理器。例如,同时打开任意一个文件列表中的所有文件。 下面展开介绍下@contextmanager...

2021-01-02 11:29:08 154

原创 Python 上下文管理器和with块 一

上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样 上下文管理器协议包含 __enter__ 和 __exit__ 两个方法 把值绑定到目标变量上(as 子句)是在上下文管理器对象上调用 __enter__ 方法的结果 with语句开始运行时,会在上下文管理器对象上调用 __enter__ 方法,with 语句运行结束后,会在上下文管理器对象上调用__exit__方法。不管控制流程以哪种方式退出 with块,都会在上下文管理器对象上调用__exit__方

2021-01-02 10:50:57 219 3

原创 C++多线程二 向线程函数传递参数

thread对象第一个参数是函数或可调用对象,后面依次传入函数或可调用对象的n个参数 需要注意的是默认参数是拷贝到线程独立内存中 void update_data_for_widget(widget_id w, widget_data& data); // ① void oops_again(widget_id w) { widget_data data; std::thread t(update_data_for_widget, w, data); // ② disp

2021-01-01 14:20:16 438

原创 C++多线程一 启动/加入/分离线程

C++线程库启动线程,可以归结为构造std::thread对象 std::thread在头文件<thread> std::thread 可以用可调用(callable)类型构造 启动线程之后,要选择结束线程的方式,等待线程结束(加入式.join()),还是让其自主运行(分离式.detach)代码示例:struct func { int& i; func(int& i_) : i(i_) {} void operator() () { for (uns

2020-12-31 00:14:19 327

原创 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 398 1

原创 Python 解释器

一句话定义就是,解释器是代码与计算机硬件之间的软件逻辑层python代码执行过程: 源代码*.py文件编译成字节码.pyc文件 将.pyc文件转发到所谓的“虚拟机(PVM)”中 下面简单介绍下上述两个步骤, 字节码编译 编译是一个简单的翻译过程,字节码是源代码底层的,与平台无关的表现形式 如果源码(*.py)没有改动,执行过程会直接使用字节码(*.pyc);如果发生改动,字节码文件将被重建 如果机器上不允许写入字节码,程序仍然可以工作,*.pyc文件会在内存中被创建,程序结束后

2020-12-26 22:19:10 115 1

原创 Ubuntu16.04 安装pytorch

1.下载anacondahttps://www.anaconda.com/products/individual#linux2.安装ancondabash Anaconda3-2020.02-Linux-x86_64.shenter -------------------------------3.下载pytorchgit clonepytorch/pytorch4.创建虚拟环境conda create -n your_virtualenv_name python=3.7..

2020-12-26 18:37:04 115

原创 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 424

原创 协程 Python yield

协程,又称微线程,纤程。英文名Coroutine。 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。 协程是一个线程执行 Python对协程的支持还非常有限,用在generator中的yield可以一定程度上实现协程 import timedef consumer(): r = '' while True: n = yield r if not n:

2020-12-26 18:14:07 93

原创 模型量化(Model Quantization)

Tensorflow Model QuantizationQuantizing deep convolutional networks for efficient inference: A whitepaper推理加速库:GEMMLOWP , Intel MKL-DNN , ARM CMSIS , Qualcomm SNPE , Nvidia TensorRT降低模型复杂度的方法->降低权重和激活输出的精度要求-----int8,int16量化1.优点无需重训练 几乎不会有精度损

2020-12-25 00:56:09 1009

原创 python 常用内置函数

__getitem__ 支持对象可迭代 __setitem__ 支持可变序列协议 __iter__ 返回 self,以便在应该使用可迭代对象的地方使用迭代器,例如在 for 循环中 __getattr__ __setattr__ __repr__ 以便于开发者理解的方式返回对象的字符串表示形式 __str__ 以便于用户理解的方式返回对象的字符串表示形式 __len__ __eq__ __hash_ 创建可散列的类..

2020-12-25 00:39:32 98 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 50

原创 C++ constexpr

constexpr : 不仅是const,而且在编译期已知一言以蔽之,所有constexpr对象都是const对象,而非所有const对象都是constexpr对象。int sz;constexpr auto arraySize1 = sz; // 错误,编译期未知std::array<int, sz> data1; // 错误,一样的问题constexpr arraySize2 = 10;std::array<int, arraySize2> data2; //

2020-12-23 20:03:28 166

原创 C++ decltype/auto

auto一般会忽略顶层const,保留底层constint i = 0;const int ci = i;auto b = ci; // 顶层const被忽略,b是intauto c = &ci; // 底层const被保留,c 是int * const,指向常量整型的指针const auto f = ci;// 如果希望推断出auto类型是一个顶层const,则需要明确指出decltype 返回变量的类型,包括顶层const和引用在内const int ci = 0, &a

2020-12-23 19:59:16 64

原创 C++ 排序函数 sort(),qsort()的用法

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~所以自己总结了一下,首先看sort函数见下表:函数名功能描述sort对给定区间所有元素进行排序stable_sort对给定区间所有元素进行稳定排序partial_sort对给定区间所有元素部分排序

2017-05-03 13:39:16 268

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除