C++调用Python脚本进行18次循环操作后,脚本不执行

news2025/2/27 22:59:57

C++调用Python脚本进行18次循环操作后,脚本不执行

现象:

发送端接收端
请添加图片描述请添加图片描述

从第二张图中可以看出,python脚本卡在’[parkin_debug] 6’与’[parkin_debug] 7’之间
该测试经过多次反复测试,均在第18次循环执行时,出现上述问题

解决办法

在python解释器初始化位置加入以下多线程支持

PyEval_InitThreads();   //开启多线程支持
int nInit = PyEval_ThreadsInitialized();    //检测线程支持是否开启成功
if (nInit){
    PyEval_SaveThread();    //因为调用PyEval_InitThreads成功后,当前线程就拥有了GIL,释放当前线程的GIL。
}

在调用python脚本加入以下代码

int nHold = PyGILState_Check() ;   //检测当前线程是否拥有GIL
PyGILState_STATE gstate;
if (!nHold){
    gstate = PyGILState_Ensure();   //如果没有GIL,则申请获取GIL
}
Py_BEGIN_ALLOW_THREADS;
Py_BLOCK_THREADS;

在调用python脚本加入以下代码

Py_UNBLOCK_THREADS;
Py_END_ALLOW_THREADS;
if (!nHold) {
    PyGILState_Release(gstate);    //释放当前线程的GIL
}

问题分析

我使用C++调用python脚本的方式

//=================== 在main.cpp中初始化解释器 ===================
wchar_t *program = Py_DecodeLocale("parkin_python", NULL);
if (program == NULL) {
    fprintf(stderr, "Py_DecodeLocale fail\n");
    return -1;
}
Py_SetProgramName(program);
Py_Initialize();    //初始化Python环境
if ( !Py_IsInitialized()) { //检测是否初始化成功
    return -2;
}

//=================== 在**.cpp中调用python脚本 ===================
... python模块、函数和函数参数 初始化
PyObject* ret_py_final_estimates = PyObject_CallObject(pyfun_algorithm_mlem, args);
... python模块、函数和函数参数 释放

通过检索以下参考链接,尝试以下方式,发现可行,具体问题还在调研中。。。

C++调用Python脚本还可以通过QProcess调用,而通过管道进行数据传输。

参考链接

C++ 多线程调用Python脚本
记用C++调用Python函数时遇到的一个死锁
C++子线程中调用python代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java TCP/UDP、Socket、URL网络编程详解

文章目录网络通信协议通信双方地址端口号IP地址InetAddress类Socket 网路编程Socket类的常用构造器Socket类的常用方法UDP协议什么是UDP协议UDP网络编程DatagramSocket 构造方法DatagramSocket 常用方法DatagramPacket常用方法实现步骤单向数据发收的UDP程序双向数据发收的UDP程…

社团结构的划分及实现过程

社团结构的划分及实现过程 022036930019 张志龙 2022.11.18 题目 什么是网络社团结构,介绍给出社团结构划分几种常见算法,并且给出你实现的过程。同时对一些真实网络进行划分与真实情况进行比较,并且给出你的解释。 文章目录社团结构的划分…

整个寒假挑灯夜读用学习压抑悲伤之情(寒假总结)

目录 前言 一、回顾这一个多月(学习阶段) 二、意外经历——青训营 三、下学期规划 四、其他 前言 这几年过年越来越没有年味了,所以对过年并没有多大的期待,当别人都在朋友圈发新年快乐的时候,我应该在原神过海灯…

华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】

使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12201821.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 组成最大数 小组中…

maven-surefire-plugin,用于自动化测试和单元测试的

如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了。 maven-surefire-plugin是maven里执行测试用例的插件,不显示配置就会用默认配置。这个插件的surefire:test命令会默认绑定maven执行的test阶段。 2.ma…

同城小程序应该怎么做?

同城小程序应该怎么做?同城小程序开发,微信同城小程序,同城生活小程序,同城信息发布小程序#同城小程序开发#微信同城小程序#同城生活小程序#同城信息发布小程序百收网 同城信息发布的小程序怎么做? 实际上跟 58 同城类似的&…

SpringBoot整合Dubbo和Zookeeper

安装Zookeeper 下载地址:https://zookeeper.apache.org/releases.html#download 解压,然后运行bin目录里的zkService.cmd 将conf文件夹的zoo_sample.cfg复制一份改名为zoo.cfg 修改zoo.cfg配置,dataDir临时数据存储的位置,client…

5.11 BGP属性-Preferred-Value

5.4.5配置Preferred-Value属性控制选路 1. 实验目的 熟悉Preferred-Value属性控制选路的应用场景掌握Preferred-Value属性控制选路的配置方法2. 实验拓扑 实验拓扑如图5-11所示: 图5-11:配置Preferred-Value属性控制选路 3. 实验步骤…

Python|每日一练|数组|回溯|栈|树|双指针|单选记录:N 皇后|二叉树的前序遍历|四数之和

1、N 皇后(数组,回溯) n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 …

如何选择靠谱的插画培训课程

如何选择靠谱的插画培训课程,今天教你3个维度选择一个靠谱的插画培训班! 插画培训机构课程: 1.选择插画培训班时,要先考察课程,看看课程内容是否符合自己的需求,是否有助于提高插画技术。课程设置应该灵活…

GPT系列详解:初代GPT

本文详细解读了OpenAI公司在2018年6月发布的论文《Improving Language Understanding by Generative Pre-Training》,它其中介绍的算法也就是后来人们说的GPT。本文借鉴了李沐的这个视频,感兴趣的同学可以移步观看大神的讲解。 目录引言GPT方法无监督预训…

拒绝背锅:测试项目中的风险管理一定要知道

测试经理除了要管理产品线的质量保障和日常部门事务工作外,另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展,而是想聊一聊在同行中比较高频出现的一个字眼:风险管理。 什么是风险管理 引用百度上的解释&a…

OSS上传(Java和Js)

OSS上传(Java和Js)准备工作创建RAM用户创建角色创建权限策略给角色授予权限策略获取临时访问凭证Java普通上传OSSJava分片上传OSSJS普通上传OSSJS分片上传OSS使用RAM用户或STS方式访问 由于阿里云账号AccessKey拥有所有API访问权限,建议遵循阿…

短视频配音的秘诀!你不会还在傻傻自己人声配音吧?

我们在刷短视频的时候,常常发现这些视频的声音很相似,难道都是同一个作者创作的吗? 其实,这都是他们通过AI智能配音技术,把文本转换为人工智能的声音,而非创作者本人的配音效果。 毕竟真人配音的效率太低…

Elasticsearch_分词器、搜索文档以及原生JAVA操作

文章目录一、ES分词器1、默认分词器2、IK分词器2.1 IK分词器安装及测试2.2 IK分词器词典3、拼音分词器4、自定义分词器二、搜索文档1、添加文档数据2、搜索方式3、ES搜索文档的过滤处理3.1 结果排序3.2 分页查询3.3 高亮查询3.4 SQL查询三、原生JAVA操作ES1、搭建项目2、索引操…

CIMCAl photo container detect is free, container damage detect

飞瞳引擎™小程序直接拍照识别集装箱/API接口二次开发集装箱信息识别/铅封号识别API免费顶尖AI集装箱箱号识别率99.98%以上,高泛化CIMCAIl ENGINE™ photo container detection is free,support API further development or WeChat applet,the recogniti…

Color correction for tone mapping

Abstract色调映射算法提供了复杂的方法,将真实世界的亮度范围映射到输出介质的亮度范围,但它们经常导致颜色外观的变化。在本研究中,我们进行了一系列的主观外观匹配实验,以测量对比度压缩和增强后图像色彩的变化。结果表明&#…

K8S 部署 Redis-Cluster 集群

本文使用 bitnami 镜像部署 redis-cluster 官方文档:https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster 添加 bitnami 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami自定义 values.yaml storageClass:集群的存储…

GBDT(梯度提升树,Gradient Boosting Decision Tree)

GBDT(Gradient Boosting Decision Tree)在数据分析和预测中的效果很好。它是一种基于决策树的集成算法。其中Gradient Boosting 是集成方法boosting中的一种算法,通过梯度下降来对新的学习器进行迭代。而GBDT中采用的就是CART决策树 一、Boosting Boosting指把多个…

一周搞定模拟电路视频教程,拒绝讲PPT,仿真软件配合教学,真正一周搞定

目录1、灵魂拷问2、懦夫救星3、福利领取2、使用流程1、灵魂拷问 问:模拟电路很难吗? 答:嗯,真的很难!!! 问:模拟电路容易学吗? 答:很难学,建议放…