Python/C API 多线程的简单例子

在C++里使用多线程Python/C API,但是国内网站相关资料很少,故摸索出了一个简单例子。

Python/C API 的多线程分为两类,一类是用Python创建的多线程,一类是用其它语言(如C++)创建的多线程。

本篇博客仅仅讨论第一种情况,第二种情况可以参考C/C++ 多线程调用嵌入Python完整流程_pythonthreadlocker_好男孩朋友99的博客-CSDN博客

 环境:已导入Python3库的Visual Studio 2019,Windows10。配环境教程可参考C++使用Python3的API_Eliza_Her的博客-CSDN博客

#include <Python.h>
#include <iostream>
#include <cstring>
using namespace std;

int main(int argc, char* argv[])
{
	Py_Initialize(); /*初始化python解释器,告诉编译器要用的python编译器*/
    // Python3.7及以后的版本,PyEval_InitThreads()已经被合并到Py_Initialize()里了,不需要手动调用

	// 存储main State,最后也要在main State下Finalize
	PyThreadState* _main = PyThreadState_Get();

	// 创建第一个解释器状态
	PyThreadState* state1 = Py_NewInterpreter();

	// 在第一个解释器状态中执行一些代码
	PyThreadState_Swap(state1);
	PyRun_SimpleString("print('Hello from interpreter 1!')");

	// 创建第二个解释器状态
	PyThreadState* state2 = Py_NewInterpreter();

	// 在第二个解释器状态中执行一些代码
	PyThreadState_Swap(state2);
	PyRun_SimpleString("print('Hello from interpreter 2!')");

	// 切换回第一个解释器状态
	PyThreadState_Swap(state1);
	PyRun_SimpleString("print('Hello again from interpreter 1!')");

	// 清理解释器状态1
	Py_EndInterpreter(state1);
	// 清理解释器状态2,清理前要切换到State2
	PyThreadState_Swap(state2);
	Py_EndInterpreter(state2);
	// 切换回main
	PyThreadState_Swap(_main);

	Py_Finalize(); /*结束python解释器,释放资源*/

	return 0;
}

输出:

 这个例子只涉及非常基础的用法,更加深入的用法可以参考官方文档Initialization, Finalization, and Threads — Python 3.11.3 documentation

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值