Python多线程多解释器C-API

2024-06-16 14:57:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用面向Python的C API,但是很难理解一些特殊情况。我可以测试它,但它似乎是一个容易出错和耗时。所以我来看看有没有人已经这么做了。

问题是,在线程和子解释器之间没有直接关系的情况下,使用子解释器管理多线程的正确方法是什么?

Py_Initialize();
PyEval_InitThreads(); /* <-- needed? */
_main = PyEval_SaveThread(); /* <-- acquire lock? does it matter? */
/* maybe do I not need it? */
i1 = Py_NewInterpreter();
i2 = Py_NewInterpreter();

我使用互斥锁吗?需要使用锁吗?线程函数应该如下所示:(线程不是python,可能是POSIX线程)

螺纹1

_save = PyThreadState_Swap(i1);
  // python work 
PyThreadState_Restore(_save);

螺纹2(几乎相同)

_save = PyThreadState_Swap(i1);
  // python work 
PyThreadState_Restore(_save);

线程3(几乎相同,但与子解释器i2

_save = PyThreadState_Swap(i2);
  // python work 
PyThreadState_Restore(_save);

这是对的吗?这是我想要达到的一般情况吗?有比赛条件吗?

谢谢!


Tags: pysave情况itrestore线程解释器work