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 :)
È stato utile?

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
scroll top