DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2023年1月30日

摘要: 目录 1.首先编写python调用C++的demo 2.gdb调试python程序 3.全速运行程序 4.查看堆栈信息 当我们用Python调用C++的库,并且C++库中存在段错误崩溃时,首先想到的还是用gdb进行调试,具体使用方法如下: 使用该方法的前提是编译C++库的时候要加上-g选项,使编译出 阅读全文
posted @ 2023-01-30 17:56 DoubleLi 阅读(830) 评论(0) 推荐(0)

摘要: 大多数常规 Python 调试器支持仅调试 Python 代码。 但是,实际上,Python 结合 C 或 C++ 一起使用时需要高性能或直接调用平台 API 的能力。 (有关演练,请参阅创建适用于 Python 的 C++ 扩展。) Visual Studio 为 Python 和本机 C/C++ 阅读全文
posted @ 2023-01-30 17:54 DoubleLi 阅读(933) 评论(0) 推荐(0)

摘要: python可以利用SO的方式去调用C++中的函数,但是需要一种调试方案来进行python和C++的联合调试,效果是直接在c++代码中打断点,然后python在进行c++so调用的时候,直接进入到断点处: testlib.cpp #include using namespacestd; PyObje 阅读全文
posted @ 2023-01-30 17:53 DoubleLi 阅读(419) 评论(0) 推荐(0)

摘要: python和c++分别在Linux和Windows下联合调试 首先创建一个python测试项目和一个c++拓展项目 一、在Windows下进行调试 1. 编译器安装 2. C拓展模块安装 3. 调试 3.1 vscode调试配置 3.2 调试 二、在Linux下进行调试 环境 1. Python环 阅读全文
posted @ 2023-01-30 17:51 DoubleLi 阅读(623) 评论(2) 推荐(0)

摘要: 说明: 当我们的python程序的一些函数的后端实现为C++时(比如Pytorch, TensorFlow或tvm等)可以使用当前方法调试。有两种方式可以安装调试环境: 一. 搭建环境 有两种方式搭建环境,第一种是用apt安装dbg包,第二种方式是编译python源码。 1.1 安装python的d 阅读全文
posted @ 2023-01-30 17:49 DoubleLi 阅读(320) 评论(0) 推荐(0)

摘要: 首先,所有python的函数都是用extern "C"定义的,因此对于C和C++,其使用是一样的。 c语言调用python必须要有的API(不管有没有多线程): PyRun_SimpleString //执行一段python代码 PyImport_Import //导入python模块 PyModu 阅读全文
posted @ 2023-01-30 17:41 DoubleLi 阅读(385) 评论(0) 推荐(0)

摘要: 今天看了近一天关于多线程的应用中,如何安全调用python方面的资料,开始的时候看的简直头大如斗,被python语言的全局锁(Global Interpreter Lock)、线程状态(Thread State )等都有点绕晕了,后来经过各方面文章和帮助文档的相互参考,发现对于2.4/2.5版本,提 阅读全文
posted @ 2023-01-30 17:34 DoubleLi 阅读(442) 评论(0) 推荐(0)

摘要: 为什么? 1、提升效率。 2、一开始代码是在python中用了多进程,后面发现c++调用的Python代码是无法开启多进程的。由于Python解释器有全局解释所GIL的原因,导致在同一时刻只能有一个线程拥有解释器,所以在C++多线程调用python脚本时,需要控制GIL,线程获取GIL。 c++如何 阅读全文
posted @ 2023-01-30 17:33 DoubleLi 阅读(349) 评论(0) 推荐(0)

摘要: 1、背景 简单说一下需求,Qt开发的上位机界面程序,需要调用Python编写的算法跑一个结果返回到界面上显示。 2、度娘出一篇博客,按照步骤进行环境搭建和简单的代码测试 环境搭建请参照如下博客地址: 博客:① https://blog.csdn.net/cholenmine/article/deta 阅读全文
posted @ 2023-01-30 17:29 DoubleLi 阅读(518) 评论(0) 推荐(0)

摘要: 脚本语言是快速编写富有弹性的代码的重要方法之一,在 Unix 系统自动化管理中已经应用了多种脚本语言。现在,在许多应用开发中,也提供了脚本层,这大大方便用户实现通用任务自动处理或者编写应用扩展,许多成功的应用,诸如 GIMP、Emacs、MS Office、PhotoShop、AutoCAD 等都应 阅读全文
posted @ 2023-01-30 17:26 DoubleLi 阅读(501) 评论(0) 推荐(0)

摘要: 由于Python解释器有全局解释所GIL的原因,导致在同一时刻只能有一个线程拥有解释器,所以在C++多线程调用python脚本时,需要控制GIL,线程获取GIL。 在主线程中初始化Python解释器环境,代码如下: { Py_Initialize(); //初始化Python环境 if ( !Py_ 阅读全文
posted @ 2023-01-30 17:20 DoubleLi 阅读(1152) 评论(0) 推荐(0)

摘要: 项目需要C++调用python的算法,由于python算法比较耗时,因此采用在C++里启动working thread来调用python脚本,python代码里含有cv2.imread()等opencv的调用,在子线程里调用会卡死。 解决办法: //1,主线程初始化python时,需要使能多线程:P 阅读全文
posted @ 2023-01-30 17:15 DoubleLi 阅读(220) 评论(0) 推荐(0)

摘要: 最近都很忙,忙着把公司的Python回测框架完成。前两天公司同事抱怨 C/C++调用Python超级烦人,动不动就返回NULL,而且内存暴涨,于是我决定尝试解决这个问题,提供一套完整的开发流程,供大家技术分享。要完成C/C++调用Python最好是熟悉C/C++和Python,否则出了问题就比较难解 阅读全文
posted @ 2023-01-30 17:13 DoubleLi 阅读(2345) 评论(0) 推荐(0)

摘要: python unicode字符编解码问题参见【Python笔记2.1】 python中用zipfile解压zip包网上资料一堆,这里就不多说了。 下面使用【Python笔记2.1】中总结出来的字符编解码函数来解决zipfile解压zip包的问题。时间仓促,直接上代码。 完整示例代码(含【Pytho 阅读全文
posted @ 2023-01-30 17:05 DoubleLi 阅读(163) 评论(0) 推荐(0)

摘要: 以下部分参考[1],这里复制了其中一部分是为了防止原文被移动或删除。 概述 Python 中有字符串类型(str)和字节类型(byte),以及 Python 编码中最常见也是最顽固的两个错误: UnicodeEncodeError: 'ascii' codec can't encode charac 阅读全文
posted @ 2023-01-30 17:04 DoubleLi 阅读(568) 评论(0) 推荐(0)

摘要: 概述 在上一篇笔记中讲述了C/C++多线程调用Python类,但是如果Python提供的接口不是class封装的情况该怎么办呢,此时如何保证在C/C++多线程调用Python代码时能够正常运行呢? 在多线程开发中,尽量避免使用全局变量,我们可以将Python中需要全局初始化的变量放到一个字典(或元祖 阅读全文
posted @ 2023-01-30 17:03 DoubleLi 阅读(147) 评论(0) 推荐(0)

摘要: 概述 在多线程开发中,往往会涉及很多handle、对象等变量的存储,这时候对于Python代码,我们可以采用面向对象编程。下面主要讲述C/C++如何调用Python类。 先看一段Python代码 student.py class Person: def __init__(self): self.in 阅读全文
posted @ 2023-01-30 16:58 DoubleLi 阅读(302) 评论(0) 推荐(0)

摘要: C/C++调Python时,由于Python解释器有GIL(Global Interpreter Lock)的原因,导致在同一时刻只能有一个线程拥有GIL,我们可以将其简单理解为全局锁。所以在C/C++多线程调用Python时需要先获取GIL。 C/C++多线程调Python #include <s 阅读全文
posted @ 2023-01-30 16:52 DoubleLi 阅读(271) 评论(0) 推荐(0)

摘要: 随着机器学习/深度学习这几年的的火热,python成了当红炸子鸡,使用python训练机器学习模型则成了开发人员们最喜欢的方法,但是由于过往调度系统一般都是用C++来开发的,因此我们只有两种方法来调用python脚本,一种是使用上篇中提到的子进程的方法,另外一种则是直接使用C++/python进行混 阅读全文
posted @ 2023-01-30 14:00 DoubleLi 阅读(207) 评论(0) 推荐(0)

摘要: 最近在做C++调Python的work,简单总结下 (一) 初始化和关闭Python解释器 #include<Python.h> Py_Initialize(); … Py_Finalize(); 所有的Python程序都要在这之间执行 (二) load Python模块 又分为以下两种方式 (1) 阅读全文
posted @ 2023-01-30 13:57 DoubleLi 阅读(578) 评论(0) 推荐(0)

摘要: 错误场景:一直等待全局锁。 解决方法: 一、首先定义一个封装类,主要是保证PyGILState_Ensure, PyGILState_Release配对使用,而且这个类是可以嵌套使用的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <pyth 阅读全文
posted @ 2023-01-30 13:51 DoubleLi 阅读(71) 评论(0) 推荐(0)

摘要: 项目场景: 在使用C++中thread类创建子线程完成相关功能,并且主线程不阻塞直到子线程完成。 问题描述: 子线程的初始化在对象的初始化过程中,并且子线程有自己独立的功能,主线程并不阻塞直到子线程完成对应的功能。类似代码示例如下: void task1(std::string msg){ std: 阅读全文
posted @ 2023-01-30 13:49 DoubleLi 阅读(1956) 评论(0) 推荐(0)