Ожидается ли, что PyThreadState * основного потока Python будет равен NULL? - PullRequest
0 голосов
/ 13 февраля 2011

У меня есть программа на python, которая вызывает библиотеку c ++, которая хочет снять все блокировки python, чтобы могли работать другие потоки python.

При использовании PyEval_SaveThread и PyEval_ReleaseThread я получаю ошибки, которыесостояние потока равно NULL:

Fatal Python error: PyEval_SaveThread: NULL tstate

Однако функция нижнего уровня, похоже, с радостью принимает состояние NULL:

PyThreadState *s;
s = PyThreadState_Swap(NULL);
// (now s = 0)
PyEval_ReleaseLock();

// ....

PyEval_AcquireLock();
PyThreadState_Swap(s);

// everything seems to be just fine :)

1 Ответ

2 голосов
/ 14 февраля 2011

Ответ: нет , оно никогда не должно быть NULL (если это так, то это фатальная ошибка).Оказалось, что это потому, что я связывался с двумя разными версиями python, одна через boost_python, а другая напрямую.

Главный совет: используйте ldd или otool -L для проверки зависимостей вашей библиотеки, когда происходят забавные вещи;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...