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 
#include 
#include 
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;
}

输出:

Python/C API 多线程的简单例子_第1张图片

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

你可能感兴趣的:(python,c++,Python/C,API)