Il pihthreadstate* del thread principale di Python dovrebbe essere nullo?
-
13-11-2019 - |
Domanda
Ho un programma Python che chiama una libreria C ++, che desidera rilasciare tutti i blocchi Python in modo che altri thread di Python possano eseguire.
Usando PyEval_SaveThread
e PyEval_ReleaseThread
Ricevo errori che lo stato del thread è nullo:
Fatal Python error: PyEval_SaveThread: NULL tstate
Tuttavia, la funzione di livello inferiore sembra accettare felicemente lo stato nullo:
PyThreadState *s;
s = PyThreadState_Swap(NULL);
// (now s = 0)
PyEval_ReleaseLock();
// ....
PyEval_AcquireLock();
PyThreadState_Swap(s);
// everything seems to be just fine :)
Soluzione
Risposta: No, non dovrebbe mai esserlo NULL
(Se lo è, è un errore fatale). Si è scoperto che questo perché stavo collegando contro due diverse versioni di Python, una tramite Boost_python e l'altra direttamente.
Suggerimento: Usa ldd
o otool -L
Per controllare le dipendenze della tua biblioteca quando si verificano cose divertenti;)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow