Est le PyThreadState* des principaux python thread devrait être NULLE?
-
13-11-2019 - |
Question
J'ai un programme en python qui appelle une bibliothèque c++, qui souhaite la libération de tous les python serrures de sorte que d'autres python threads peuvent s'exécuter.
À l'aide de PyEval_SaveThread
et PyEval_ReleaseThread
J'ai des erreurs que l'état du thread est NULLE:
Fatal Python error: PyEval_SaveThread: NULL tstate
Cependant, le niveau inférieur de la fonction semblent accepter la NULLE état joyeusement:
PyThreadState *s;
s = PyThreadState_Swap(NULL);
// (now s = 0)
PyEval_ReleaseLock();
// ....
PyEval_AcquireLock();
PyThreadState_Swap(s);
// everything seems to be just fine :)
La solution
Réponse: pas de, il n'est jamais destiné à être NULL
(si elle l'est, c'est une erreur fatale).S'est avéré que c'était parce que j'étais reliant à l'encontre de deux différentes versions de python, via boost_python, et l'autre directement.
Tip Top:utilisation ldd
ou otool -L
pour vérifier votre bibliothèque de dépendances lors de drôles de choses qui se passe ;)