//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方法问题相关推荐

  1. linux c语言 ppt,Linux下C语言编程.ppt

    Linux下C语言编程 Linux中C语言的重要性 Linux和C天生有不解之缘. Linux操作系统的内核主要是用C写的,另外Linux下的很多软件也是用C写的,特别是一些著名的服务软件,比如MyS ...

  2. linux系统下怎么使用c语言,Linux操作系统下C语言使用.ppt

    Linux操作系统下C语言使用 Linux操作系统下C语言的使用 授课教师:江兰帆 E-Mail: jiang_lanfan@126.com GCC的使用 在LINUX开发环境下,GCC(GNU C ...

  3. bootstrap获取下拉框数据_bootstrap动态调用select下拉框的实现方法

    bootstrap动态调用select下拉框的实例代码 html代码: 填报部门: JS代码: /*获取下拉菜单*/ function showSel(){ $.ajax({ "type&q ...

  4. linux c语言工具,Linux下C语言编程环境的工具.doc

    Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...

  5. c语言调用cmd隐藏黑窗口,golang 调用cmd下程序隐藏黑窗口-方法1

    通过go的标准库exec调用cmd命令时会闪弹黑窗口,为解决此问题在windows下可以用win32 API 的 WinExec. 此问题主要出现在带UI或无控制台的程序调用cmd时. 编译go时加入 ...

  6. 单片机c语言 openssl,Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

  7. linux怎么杀死线程c语言,教程-linux下c语言编程 第一弹-线程的使用

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /*linux下最常用的应该就是pthread线程库了 本教程就是关于pthread的 关于线程是什么东西我就不赘述了 百科上都有*/ #include ...

  8. ftp服务器端的编写 c语言6,linux下c语言编写的ftp服务器

    弹性云服务器 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取.可弹性伸缩的云服务器,帮助用户打造可靠.安全.灵活.高效的应用环境,确保服务持久稳定运行,提升运维效 ...

  9. matlab m语言,我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言...

    导航:网站首页 > 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 匿名网 ...

最新文章

  1. Java学习从入门到精通的学习建议
  2. 我被编程语言PUA了!
  3. [leetcode]1007. 行相等的最少多米诺旋转
  4. python导入csv数据例子-使用python读取csv文件快速插入数据库的实例
  5. C++list常用接口总结
  6. python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
  7. [HDOJ3998] Sequence(DP,最大流)
  8. 最详细的创建虚拟机_创建_安装配置_配置启动向导
  9. tomcat ajp协议安全限制绕过漏洞_Apache Tomcat文件包含漏洞(CVE20201938)复现
  10. Vue之前端页面使用json编辑框
  11. Android Service LifeCycle
  12. Atitit 各种设计图纸分类 目录 1. Atitit 常见软件设计图纸总结 2 1.1. Uml系列图纸 2 1.2. Er图 req需求图 2 1.3. Parametric diagr
  13. python如何调用tess_python下以api形式调用tesseract识别图片验证码
  14. I2C总线与EPPROM
  15. 计算机中SQL中文,SQL是什么意思 sql的中文含义
  16. uni-gram与bi-gram语言模型
  17. 邮件撤回方法详解,一键解决发错邮件的尴尬
  18. 券商单向视频见证开户全面开放!菊风泛金融单向视频开户一体化解决方案极速助力
  19. 漏洞扫描的原理与设计
  20. 腾讯云Linux服务器如何安装Discuz个人论坛?

热门文章

  1. JavaScript倒计时
  2. 单点系统架构的可用性与性能优化
  3. 【转】利用matlab生成随机数函数
  4. 在ubuntu14.04 64位中使用jd-gui
  5. Eclipse中查看没有源码的Class文件的方法
  6. 完美解决LINK : fatal error LNK1104: cannot open file Debug/xx.exe的问题
  7. Linux 环境下的抓包工具 - tcpdump
  8. STM32:Flash擦除与读写操作(HAL库)
  9. ESP8266和MQTT
  10. 设计模式--装饰者(Decorator)模式