自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大坡3D软件开发

自主操作系统和CPU--用软件和芯片来改变世界

  • 博客(26)
  • 资源 (44)
  • 收藏
  • 关注

原创 使用pybind11开发python扩展库(10)

前面学习了从c++里导出类到python里使用,这是比较简单的方式,也是最基本的内容。接着下来我们来学习更高级的一些内容,比如C++里写一些虚函数,或者叫做接口函数,这些函数按理是可以在C++里的派生类进行重写,这是比较明白确认的事情了。但是你也许会问一下,如果这些接口函数需要在python里也能重写这些虚函数行吗?目前还是不能直接就可以重写的,需要采用第二个对象的方法才可以,这里需要一个临时对象的技巧才可以。下面我们就来通过例子来学习这种技巧,让你的小伙伴在python使用C++的对象更加舒服。假

2021-06-30 09:52:37 292

原创 爬虫日记(88):Scrapy的Downloader类(一)

从前面的分析我们知道,当下载的连接URL去重之后,就需要把URL放到下载器里进行下载,这样才会得到网页相关的数据,比如HTML、图片、脚本等等。然后我们根据网页再来抽取相关的数据,或者获得图片。接着下来,我们更进一步地来了解下载器是怎么样把URL的内容获取回来,明白整个数据取得的过程,对于我们了解爬虫过程也是有重要意义的。从下图就可以了解整个下载器的初始化过程:先从引擎的构造函数里进行初始化,它是从缺省的配置文件里加载参数DOWNLOADER,而这个参数里保存的是scrapy.core.do

2021-06-29 09:32:32 306

原创 使用pybind11开发python扩展库(9)

Keyword-Only参数在python 3引入Keyword-Only参数,目前在pybind11也提供了支持。对这个星号*的定义和描述在[PEP 3102]中。星号可以以一个参数的形式出现在函数声明中的参数列表中,但星号之后的所有参数都必须有关键字(keyword),这样在函数调用时,星号*之后的所有参数都必须以keyword=value的形式调用,而不能以位置顺序调用。def f(a, *, b): # a can be positional or via keyword; b m.

2021-06-26 11:37:32 223

原创 使用pybind11开发python扩展库(8)

相对前面的函数返回值时的策略相比,其实还有调用策略,也就是保证函数调用时参数的生存期和状态。保持策略(Keep alive)大多数情况下,这种策略都是应用于容器与容器中的元素的生命周期处理。因为当容器还在生存周期中,而其中保持的元素失效了,那么就会发生灾难性的问题,这时候去访问这样的元素,就会导致程序出错。因此pybind11提供了一个方法让函数调用时的参数,保持与容器的生命周期一样长。比如引用函数keep_alive,这个函数的作用就是让病人Patient保持生存周期至少要长过护士Nurse。

2021-06-25 12:13:25 381

原创 使用pybind11开发python扩展库(7)

函数当你要想学习下面的内容之前,一定要先学会前面的内容,比如导出简单的类和函数,这样才有相应的基础来学习下面的内容。下面介绍的内容适合普通的C++函数,也适合C++里类的函数,以及python里叫做方法的函数。函数返回值的策略由于Python和C++采用不同的方法来管理内存,以及对象的生命周期。这样导致了绑定函数刚刚靠返回的类型来解决内存管理和对象生命周期会出问题。为了解决这个问题,pybind11提供了一个返回类型策略来管理内存和对象的生命周期,可以传送给module_::def()和ca

2021-06-24 22:50:59 245

原创 使用pybind11开发python扩展库(6)

前面介绍了怎么样通过C++11快速地开发python的扩展库,也提供多种方式来导出C++的特性,也满足了python的一些特性的要求。这样是非常方便地编写python扩展库,提高了运行效率和开发效率。这些都做完成之后,就来到了下一个环节,也就是自动化安装的阶段,即使你有最好的代码,也有最好优化的运行效率,但是安装不容易,或者缺少安装这个环节,其它的工作还是等于0,为什么这样说呢?因为没有客户愿意使用你的代码,你的库,就不会给你钱。所以接着下来,我们来学习制作pybind11的安装包。如果我们从头来编写一

2021-06-24 20:45:00 246

原创 使用pybind11开发python扩展库(5)

前面学习了继承类的导出,可见完美地完成了这一个工作,如果想掌握一些深入的内容,还是需要继续向前,比如类的多态下是怎么样导出的呢?如果我们创建一个派生类,然后导出是一个基类的指针,那么我们可以访问派生类的内容吗?为了解决这个心中的疑惑,我们来继续走上学习的征途。先来创建两个有继承关系的类,并且有虚拟函数的声明,这样才会创建虚拟表,代码如下:struct PolymorphicPet { virtual ~PolymorphicPet() = default;};struct Polymorp

2021-06-24 11:23:19 237

原创 使用pybind11开发python扩展库(4)

当我们使用python的类时,可以动态地添加属性到类里去,这是基本的工作机制,但是在C++语言里的类是固定的,也就是说在编译之后是固定的,不会变化。因此要想让C++里导出的类支持python这种特性,必须有一些改变才可以。现在就来搞明白怎么样让C++里导出的类支持这个特性。这时需要引入使用py::dynamic_attr()特性,经过它处理之后,就可以让C++类导出之后具备动态添加成员变量的功能,声明如下: py::class_<MyPet>(m, "MyPet", py::dynam

2021-06-24 09:34:43 262

原创 使用pybind11开发python扩展库(3)

面向对象的类和结构怎么样导出?由于类和结构都属于自定义类型,要想导出这样的类型给python使用,必须使用另外一种方式,就是创建与python里一样的类结构。下面通过一个结构定义为Pet的例子来说明:struct Pet { Pet(const std::wstring &name) : name(name) { } void setName(const std::wstring &name_) { name = name_; } const std::wstring &am

2021-06-23 11:28:40 211

原创 使用pybind11开发python扩展库(2)

继续前面的文章来学习,已经知道使用这个库来写python扩展库是轻松愉快的事情,但还是有很多细节需要学习的,毕竟C++是一个比较灵活的语言。比如在C++里写一些支持使用缺省参数值的函数,如下:int add(int i = 1, int j = 2) { return i + j;}从上面参数可见,i缺省的值为1,j缺省的值是2。这个是C++的函数定义,如果要把它改为python调用的扩展,是否直接这样就可以支持的呢?可以说不行的,目前还做不到这样。需要使用额外的语法规则才可以,如下:

2021-06-22 23:06:15 246 2

原创 使用pybind11开发python扩展库(1)

前面介绍了怎么快速地使用C++11来开发python的扩展库,这样可以更快地提高python的代码运行和计算性能,这样可以把关键代码做优化,非关键代码就使用python来开发就行了,这样混合开发方式比go更加快方便快捷,性能也比go好,比java更好十倍以上。可以这种方式是无敌的工具组合。现在来学习怎么样在C++的开发模块里让输入关键字参数,比如像下面这种形式:import exampleexample.add(i=1, j=2)这样i和j就跟位置没有关系了,可以j放在前面,也可以放在后面。.

2021-06-22 20:52:26 371 1

原创 使用pybind11来快速开发python程序扩展库

开发python的C++扩展库有很多方法,比如使用原始的C接口,也是cpython的基本开发方法,这种方式对于一般人员来说不太友好,因为需要对它的类型和引用都非常熟悉。也有使用boost库的python库来开发,但是这个库太宠大了,需要完全编译之后才能使用。因此大家在想有没有一个既简单又快捷的开发库,它就是pybind11库,这个库由于使用C++11的特性,必须要支持C++11的编译器才可以使用。在下面的例子里是使用VC++2017来进行,它是支持C++11的特性的,所以完全可以编译正常。首先我们需要下

2021-06-21 22:29:14 293

原创 python 3.7使用protobuf-3.17.3版本

从前面一文里已经学会安装protobuf在VC2017里编译,有时候服务器使用python来开发,那么就需要与VC开发的客户端进行通讯,这样就需要协议进行通讯,这时候解包和打

2021-06-20 23:16:59 1322

原创 VC2017使用protobuf-3.17.3版本

序列化是一个永恒的主题,比如网络上协议的打包和解包,比如保存状态到文件以及从文件恢复状态,还有进程之间进行交换数据等等。使用protobuf协议有一个优势,就是可以自动化生成和自动化解包,...

2021-06-20 22:07:42 608

原创 爬虫日记(87):Scrapy的RFPDupeFilter类(二)

前面函数的代码已经很清楚,就是生成请求对象的指纹信息,现在来分析每一行代码的作用:第52和53行是判断请求是否包含额外包含的头内容,如果有就把它们先排序,然后把每一项转换为小写字母表示,再生成一个元组。第54行是调用弱引用字典类对象_fingerprint_cache,它是这样创建的:_fingerprint_cache = weakref.WeakKeyDictionary()跟前学习过的例子一样,明白它是随着对象删除而删除的字典。常常用来缓存的应用,这里就是这样的使用。这里使用了

2021-06-18 12:41:27 234

原创 C++比较方便访问Mysql数据库的类库QTL

之前看一个别人写的程序,里面需要访问Mysql数据库,还是使用自己的封装,但是极其难用,因此需要改写这部分代码,本来想自己重新写一个,感觉还是从网上找一个替换比较方便一些。因此就找到了QL...

2021-06-15 15:56:38 536 1

原创 爬虫日记(87):Scrapy的RFPDupeFilter类(一)

前面已经分析了调度器的入队代码,在这里会调用RFPDupeFilter类的功能,用来判断两个下载的url请求是否相同,如果相同,并且参数设置为去重时,就会不再下载,这样避免了重复下载同样的url页面。接着下来我们来分析怎么样实现url相同的判断,是否直接采用字符串相同的判断?还是有什么方法进行判断呢?要解决这些疑问,我们需要把这些代码分析一轮,才能搞明白为什么这样设计,以及这样实现有什么优点。在开始分析之前,我们先来学习一下python怎么样方便记录一个对象已经查看过。由于一个对象有很多属性,.

2021-06-14 18:29:55 428

原创 爬虫日记(86):Scrapy的Scheduler类(三)

前面已经分析过入队的情况,进入队列时,会根据请求的内容来生成一个数字指纹,如果两个数字指纹一样,那么就可以丢掉这个请求,这样就可以防止重复的请求,这样可以提高效率。接着下来,我们来分析一下从队列里出队的情况,通前面的分析已经知道引擎会调用函数_next_request_from_scheduler,而这个函数就会调用调度器的函数next_request,它将返回请求对象:第103行从内存队列里弹出一个请求。这个mqs的创建过程是这样的:从上面过程来看,self.mqs就是类ScrapyPri

2021-06-13 16:47:54 277

原创 爬虫日记(86):Scrapy的Scheduler类(二)

上面已经准备了所有队列的对象,下一步我们就来分析怎么进入队列,以及怎么实现优先级队列管理这些请求。这些函数的调用关系如下:因此我们需要从函数enqueue_request入手,先来分析它的代码:第89行里的参数request就是要调度队列的请求对象。第90行先判断是否允许过滤,如果不允许过滤就跳过这里;允许过滤就调用去重类的成员函数request_seen,在这个函数实现是否重复的请求判断。第91行如果是重复的,就输出日志。第92行跳过重复的请求,直接返回,不进入调度队列。.

2021-06-11 18:16:44 239

原创 编译和使用boost 1.75版本

随着时间向前推进,来到今天,boost库已经发布到最新的1.76.0版本。为了安全起见,目前还是使用1.75.0版本。以下就是基于1.75.0的版本来进行编译和测试,开发工具使用windows 10平台的VC2017社区版本。首先我们回来到下面这个网站:然后找到对应的版本下载,这里下载的是boost_1_75_0.7z版本,如果想快速地下载,可以使用迅雷来下载,可以几秒钟就下载完成了。接着使用解压工具解压到目录D:\kangjin\TestBoost\boost_1_75_0,然后我们.

2021-06-09 11:53:32 1133 2

原创 MFC应用程序中处理消息的顺序

近日看到一个MFC的程序,发现有一些开发人员,不了解MFC程序的消息处理,他们把定时器删除KillTimer放在析构函数里,这样肯定会出错,因为那时候窗口都已经删除了。因此需要把这个定时器删除放在窗口没有删除之前,否则调用此函数就会出错,因为没有窗口句柄了。因此应该在收到WM_DESTROY消息里或之前进行删除。MFC应用程序中处理消息的顺序1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndP...

2021-06-07 09:52:56 253

原创 爬虫日记(86):Scrapy的Scheduler类(一)

前面学习过了引擎类,明白整个引擎的工作过程,在引擎里要调用调度管理类,这样才能够把请求下载进行去重,或者优先下载等功能实现。现在我们就来分析这个类的实现,以便完全理解调度管理类的相关细节。这个类的创建过程如下图:要创建调度管理类,它需要从默认设置参数里获得类的名称:SCHEDULER = 'scrapy.core.scheduler.Scheduler'然后根据这个参数名称,就可以从目录里找到对应的python包,再找到对应的调度类Scheduler,最后就可以通过上面的语句进行构造,创

2021-06-05 19:54:21 583

原创 爬虫日记(85):Scrapy的ExecutionEngine类(四)

接着下来我们来分析spider_is_idle函数,这个函数用来判断蜘蛛类是否处于空闲状态:第189行判断下载回应处理器是否空闲,如果不是空闲状态直接可以判断蜘蛛类为非空闲状态;反之就不行了,因为即使下载回应是空闲的,但是正在发送请求中。第193行判断下载器是否为活动当中,如果是活动当中说明蜘蛛类也不是空闲状态。第197行判断引擎里请求生成器是否为空,如果非空说明还有请求需要下载,说明蜘蛛类也为非空闲状态。第201行调度器里的队列是否还有数据,如果有数据也是非空闲状态。这个函数根

2021-06-04 18:37:14 184

原创 爬虫日记(85):Scrapy的ExecutionEngine类(三)

接着下来我们来分析_next_request_from_scheduler函数,这个函数主要实现从调度器里获得下载请求,然后把请求下载再放到下载器里去下载。实现这部分的功能:也就是上图的2、3、4、5这四步的功能。因此我们需要详细地查看这个函数的每一行代码:这个函数传进来的参数spider是蜘蛛类对象。第152行代码是保存类的slot对象到临时对象,避免self.slot修改为空的状态冲突。第153行是从类class Scheduler对象获得下一个可以发送的请求下载对象。第15

2021-06-04 09:21:41 543

原创 爬虫日记(85):Scrapy的ExecutionEngine类(二)

前面可以看到一开始打开蜘蛛类有一次触发调度之外,还有下载数据返回之后进行一次调度。如果中间有调度没有准备好,或者队列满了,这样不会产生有新的下载,那么怎么样再次触发调度发生呢?这时候就要靠另一个备份方案,就是定时调度方案,它的建立如下图:通过两个运行链都可以最终地调用_next_request函数,进入下载请求队列,把准备好的下载请求发送出去下载。因此接着下来我们继续分析_next_request函数,它的代码如下:第115行里传入的参数spider就是代码CallLaterOnce(s

2021-06-02 09:44:27 185

原创 爬虫日记(85):Scrapy的ExecutionEngine类(一)

前面分析了Crawler类,这个类实现了爬虫创建和运行管理,同时也是一个爬虫的公共类,可以把这个类传送到各个类中去使用。紧接着就会把控制权交给下一个类ExecutionEngine,这个类的生命周期如下:因此我们先来分析ExecutionEngine类的构造函数,理解它是怎么创建的,以及有什么样的数据结构,最后通过算法来理解这个类的功能实现。打开目录scrapy\core,就可以找到文件engine.py,然后就可以分析这个类的代码了。ExecutionEngine类的构造函数代码如下:

2021-06-01 11:54:00 343

python抓取天气并分析 实例源码

Python代码抓取获取天气预报信息源码讲解。这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单。这段代码可以获取当地的天气和、任意城市的天气预报,原理是根据url找到网站截取相应的数据展现。 python抓取广州天气并分析 实例源码

2017-08-28

wix3.11版本安装工具

wix3.11版本安装工具

2017-06-19

WiX3.10版本安装工具

WiX3.10版本安装工具

2017-06-19

GOOGLE的TPU论文

GOOGLE公开TPU的论文

2017-04-06

深度强化学习论文

DQN的论文

2017-03-17

书《深度学习》

2015年,深度学习三大牛Yann LeCun、Yoshua Bengio和Geoffrey Hinton在最新的《Nature》杂志首次合作的发表综述文章《Deep Learning》。本文为该综述文章的中文译文,深入浅出地介绍了深度学习的基本原理,核心优势和未来展望。

2017-03-13

手写识别的训练数据

MNIST训练数据

2017-03-10

俄罗斯方块游戏开发

俄罗斯方块游戏开发培训里的可执行文件,让大家可以查看相关的结果。以便是否参加培训。

2016-11-30

duilib界面库20161116

更新为VC2015编译的duilib,持续重构代码,使用最新的C++14的语法。

2016-11-16

duilib界面库20161017

duilib 界面库

2016-10-17

duilib界面库

duilib界面库,长期维护的界面库,在WIN10和VS2012上编译和开发、测试通过。

2016-10-10

国产8051模拟器

一款国产的8051模拟器(全部源代码) 本软件是一款8051模拟器,他的特点是可以模拟多处理器平台,在简单的多工作区间的界面上可以很方便的模拟8051处理器, 最重要的是这个单片机系统可以完全由你自己订制,你甚至可以随意创建自己的多单片机系统,什么SMP 基于串行总线的分布式系统,集群式系统,只要你能想到的,都可以办到,充分发挥你的想象力。现在1.0版本已经基本体现出了这种思想,在以后的版本中将使这一特性变的 更加强大!

2016-09-10

mysql开发管理工具

mysql数据库的开发管理工具。

2016-07-12

mysql-5.5.50-64

windows下的64位MYSQL的版本。

2016-07-10

python-3.4.4

python 3.4的32位的windows版本

2016-07-01

tinyxml2配套源码

在软件开发过程中,为了使软件有灵活的配置,特别像界面这样的配置,同时为了减轻重复开发的任务,需要把客户的个性化需求可以通过配置文件来修改,比如像界面的颜色配置,就可通过配置文件来修改,这时就可以采用XML文件来保存和修改这些参数配置。在不同软件之间进行通讯时,也可以采用XML协议来进行数据交换,特别像WEB服务的调用时,采用传送XML格式是基本的数据交换方式。基于这些任务的需求,需要软件开发人员会在C++里使用xml格式。

2016-06-27

protoc2.5执行文件

protoc执行文件

2016-06-24

protobuf 2.5

protobuf 2.5库代码和工具

2016-06-24

selenium的浏览器驱动

目前有很多的银行网站,还是以IE为标准的浏览器,因此这里主要采用IE为测试的例子,在这里可以下载不同版本的浏览器驱动,可以是32位的,也可以是64位的,根据自己的需要下载不同的版本。在本文章里,下载的是2.35.3版本:IEDriverServer.exe,把它放在目录f:\temp\里面。

2016-06-14

WIX制作C#应用程序安装包

WIX制作C#应用程序安装包

2016-05-26

开源鸿蒙4.0不能进入桌面的补丁

系统启动后进入不到桌面 当前系统有 bug,当出现此种问题时,需要执行 killall com.ohos.launcher。 里面的hap文件替换applications\standard\hap\下的同名文件。 目录 oh/applications/standard/hap

2024-03-17

开源鸿蒙 4.0 RK3566开发板配置

开源鸿蒙 4.0 RK3566开发板配置 https://mysoft.blog.csdn.net/article/details/136779805

2024-03-17

使用WeifenLuo.WinFormsUI.Docking的简单例子

使用WeifenLuo.WinFormsUI.Docking的简单例子,演示了简单地使用这个窗口布局库。

2021-12-10

hui_test_form.rar

H-ui.admin_v3.1.3.1的学习和测试例子,前端代码的经典。

2021-08-17

python_example.rar

pybind11的安装和编译的例子,可以快速地生成安装包。

2021-06-24

Mysql_20210615_1.rar

演示访问Mysql库的C++类库QTL

2021-06-15

TestSel1.rar

爬虫日记(28):scrapy使用中间件调用浏览器 相关代码

2021-03-29

ItemDemo_ua.rar

爬虫日记(25):Scrapy 中设置随机 User-Agent 二 的配套代码

2021-03-26

爬虫日记 Imgfn1.rar

爬虫日记(23):用scrapy快速地爬取蜂鸟网图片 相关的项目代码

2021-03-24

ImgDemo1.rar

爬虫日记(22):最简单地抓取图片,仅5行代码 相关配套代码。

2021-03-23

ItemDemo3.rar

爬虫日记(21):使用Pipeline模块写入文件二 的配套代码。

2021-03-23

ItemDemo2.rar

爬虫日记(20):使用Pipeline模块写入文件 的例子

2021-03-22

ItemDemo.rar

实例使用Item对象,适用初学者,《爬虫日记》配套源码。

2021-03-21

svm_hog_data.rar

使用到LineSVC里进行机器学习的训练数据,用来训练手写识别。 配套专栏文章使用,https://blog.csdn.net/caimouse/article/details/104599920。

2020-03-02

实现numpy的C++库扩展

使用C++来扩展numpy里的数据计算,这时就需要使用numpy的扩展库功能了,下面就来提供一个使用C++编写numpy扩展库的模板,这样大家就要减少很多弯路,减少跌入坑里的成本。这个扩展库的模板是从mahotas库里抽取出来的,经过最大化的简化,这样更加容易理解,更方便学习。

2019-11-24

STM32F407VET6工程模板

玩转STM32里文章配置的代码,这里学习的第一个工程代码,可以作为后继开发的模板工程。

2019-03-14

python web py入门配套源代码

python web py入门- 实现论坛,开发技术:后端采用Python+web.py+MySQL,前端采用HTML+CSS+JavaScript+jQuery+RequireJS。

2018-02-23

webpy演示例子1

webpy演示例子1, 用于配套文章相关资源。python web py入门(9)- 论坛首页的模板中模板 前面已经提到一个模板中可以套用另外一个模板,现在就来看看这个论坛基本布局模板是怎么样的?

2018-02-21

胶囊模型的代码

胶囊模型的代码在以下论文中使用: “Dynamic Routing between Capsules” by Sara Sabour, Nickolas Frosst, Geoffrey E. Hinton. 要求 TensorFlow ( 访问 http://www.tensorflow.org 了解如何安装和升级) NumPy (详见http://www.numpy.org/) GPU

2018-02-02

C++读写json文件

https://github.com/nlohmann/json 最好用的C++读写json库

2017-12-09

空空如也

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

TA关注的人

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