c语言调用python3_linux下c语言调用python方法问题
//c语言多线程调python,必须加上红色字体,因为python本身不是线程安全的
PyObject* callPython(char* cpModelPath)
{
if(cpModelPath == NULL)
return NULL;
char modelPath[100] = "";
char modelName[21] = "";
int i;
char* cp = cpModelPath;
int len = strlen(cp);
int len1 = len;
if(len <= 0)
{
printf( "model is null, pid [%u] exit\n", (unsigned int)getpid() );
return;
}
while( *(cp + len - 1) != '/')
{
len--;
}
for(i = 0; i < len; ++i)
modelPath[i] = *(cp+i);
for(i = 0; i < len1-len; ++i)
modelName[i] = *(cp+i+len);
char modelPath1[100] = "";
strcpy(modelPath1, "sys.path.append('");
strcat(modelPath1, modelPath);
strcat(modelPath1, "')");
PyRun_SimpleString("import sys");
PyRun_SimpleString(modelPath1);
PyObject* pModule = NULL;
PyObject* pDict = NULL;
PyObject* pClass = NULL;
PyObject* pObject = NULL;
PyObject* pFunc = NULL;
//调用python中的类
pModule = PyImport_ImportModule(modelName);
if(!pModule)
{
printf( "model PyImport_ImportModule fail, pid [%u] thread [%u] exit\n",
(unsigned int)getpid(), (unsigned int)pthread_self() );
return;
}
pDict = PyModule_GetDict(pModule);
if(!pDict)
{
printf( "model PyModule_GetDict fail, pid [%u] thread [%u] exit\n",
(unsigned int)getpid(), (unsigned int)pthread_self() );
return;
}
pClass = PyObject_GetAttrString(pModule, "JobNode");//得到那个类
if(!pClass || !PyCallable_Check(pClass))
{
printf( "model PyObject_GetAttrString class fail, pid [%u] thread [%u] exit\n",
(unsigned int)getpid(), (unsigned int)pthread_self() );
return;
}
pObject = PyEval_CallObject(pClass, NULL);//生成一个对象,或者叫作实例
pFunc= PyObject_GetAttrString(pObject, "createApp");//得到该实例的成员函数
if(!pFunc || !PyCallable_Check(pFunc))
{
printf( "model PyObject_GetAttrString func fail, pid [%u] thread [%u] exit\n",
(unsigned int)getpid(), (unsigned int)pthread_self() );
return;
}
Py_DECREF(pObject);
Py_DECREF(pClass);
Py_DECREF(pDict);
Py_DECREF(pModule);
return pFunc;
}
void* func(void* arg)
{
PyGILState_STATE gstate;
gstate = PyGILState_Ensure();
PyObject* pFunc = NULL;
PyObject* pArg = NULL;
PyObject* pString = NULL;
char* cpReturn;
PyObject* p = callPython("/mnt/hgfs/D/emar_test/linux-test/marmoset/JobNode");
pFunc = p;
pArg = PyTuple_New(1);
// s 表示字符串,
// i 表示整型变量,
// f 表示浮点数,
// O 表示一个Python对象。
PyTuple_SetItem(pArg, 0, Py_BuildValue("s", "Jacky"));
pString = PyEval_CallObject(pFunc, pArg);//执行该实例的成员函数
cpReturn = PyString_AsString(pString);
printf("cpReturn=%s\n",cpReturn);
Py_DECREF(pString);
Py_DECREF(pArg);
Py_DECREF(pFunc);
PyGILState_Release(gstate);
}
void main()
{
int num = 1;
Py_Initialize();
if(!Py_IsInitialized())
{
return;
}
PyEval_InitThreads();
PyEval_ReleaseThread(PyThreadState_Get());
pthread_t pid1,pid2;
pthread_create(&pid1, NULL, func, NULL);
pthread_create(&pid2, NULL, func, NULL);
pthread_join(pid1, NULL);
pthread_join(pid2, NULL);
PyGILState_Ensure();
Py_Finalize();*/
}
c语言调用python3_linux下c语言调用python方法问题相关推荐
- linux c语言 ppt,Linux下C语言编程.ppt
Linux下C语言编程 Linux中C语言的重要性 Linux和C天生有不解之缘. Linux操作系统的内核主要是用C写的,另外Linux下的很多软件也是用C写的,特别是一些著名的服务软件,比如MyS ...
- linux系统下怎么使用c语言,Linux操作系统下C语言使用.ppt
Linux操作系统下C语言使用 Linux操作系统下C语言的使用 授课教师:江兰帆 E-Mail: jiang_lanfan@126.com GCC的使用 在LINUX开发环境下,GCC(GNU C ...
- bootstrap获取下拉框数据_bootstrap动态调用select下拉框的实现方法
bootstrap动态调用select下拉框的实例代码 html代码: 填报部门: JS代码: /*获取下拉菜单*/ function showSel(){ $.ajax({ "type&q ...
- linux c语言工具,Linux下C语言编程环境的工具.doc
Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...
- c语言调用cmd隐藏黑窗口,golang 调用cmd下程序隐藏黑窗口-方法1
通过go的标准库exec调用cmd命令时会闪弹黑窗口,为解决此问题在windows下可以用win32 API 的 WinExec. 此问题主要出现在带UI或无控制台的程序调用cmd时. 编译go时加入 ...
- 单片机c语言 openssl,Linux下C语言使用openssl库进行加密
在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...
- linux怎么杀死线程c语言,教程-linux下c语言编程 第一弹-线程的使用
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /*linux下最常用的应该就是pthread线程库了 本教程就是关于pthread的 关于线程是什么东西我就不赘述了 百科上都有*/ #include ...
- ftp服务器端的编写 c语言6,linux下c语言编写的ftp服务器
弹性云服务器 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取.可弹性伸缩的云服务器,帮助用户打造可靠.安全.灵活.高效的应用环境,确保服务持久稳定运行,提升运维效 ...
- matlab m语言,我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言...
导航:网站首页 > 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 匿名网 ...
最新文章
- Java学习从入门到精通的学习建议
- 我被编程语言PUA了!
- [leetcode]1007. 行相等的最少多米诺旋转
- python导入csv数据例子-使用python读取csv文件快速插入数据库的实例
- C++list常用接口总结
- python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
- [HDOJ3998] Sequence(DP,最大流)
- 最详细的创建虚拟机_创建_安装配置_配置启动向导
- tomcat ajp协议安全限制绕过漏洞_Apache Tomcat文件包含漏洞(CVE20201938)复现
- Vue之前端页面使用json编辑框
- Android Service LifeCycle
- Atitit 各种设计图纸分类 目录 1. Atitit 常见软件设计图纸总结	2 1.1. Uml系列图纸	2 1.2. Er图 req需求图	2 1.3. Parametric diagr
- python如何调用tess_python下以api形式调用tesseract识别图片验证码
- I2C总线与EPPROM
- 计算机中SQL中文,SQL是什么意思 sql的中文含义
- uni-gram与bi-gram语言模型
- 邮件撤回方法详解,一键解决发错邮件的尴尬
- 券商单向视频见证开户全面开放!菊风泛金融单向视频开户一体化解决方案极速助力
- 漏洞扫描的原理与设计
- 腾讯云Linux服务器如何安装Discuz个人论坛?