我正在尝试使用面向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);
这是对的吗?这是我想要达到的一般情况吗?有比赛条件吗?
谢谢!
目前没有回答
相关问题 更多 >
编程相关推荐