Сбой PyEval_RestoreThread при вызове matplotlib через Python C APIPython

Программы на Python
Ответить
Anonymous
 Сбой PyEval_RestoreThread при вызове matplotlib через Python C API

Сообщение Anonymous »

У меня есть приложение на C++, которое реализует собственный интерпретатор и консоль Python. Пользователь может ввести код Python в консоль, и этот текст будет отправлен в другой поток, где я вызываю API Python C для выполнения инструкций. Этот вторичный поток — единственный поток, который когда-либо напрямую вызывает API Python C. Обычно это работает нормально. Однако у меня происходит сбой, когда пользователь пытается использовать matplotlib через plt.show(block = False). Это должно открыть сюжет и не блокировать мой основной поток Python. Ошибка, которую я получаю в своей IDE:

Неустранимая ошибка Python:
функция должна вызываться с удерживаемым GIL после инициализации Python и до завершения Python, но GIL освобождается
заданным (текущее состояние потока Python равно NULL)


Неустранимая Ошибка Python: PyEval_RestoreThread: функция должна вызываться с удерживаемым GIL, после инициализации Python и до завершения Python, но GIL освобождается (текущее состояние потока Python равно NULL).
Состояние выполнения Python: инициализировано


Текущая цепочка 0x00002d80 (сначала самый последний вызов):



Модули расширения: numpy._core._multiarray_umath, numpy.linalg._umath_linalg, PIL._imaging, kiwisolver._cext, PIL._imagingmath, PIL._imagingtk (всего: 6)

Примечание: звоню plt.show(block = True) работает нормально.
В настоящее время я оборачиваю все вызовы API Python C с помощью PyGILState_Ensure перед вызовом и затем PyGILState_Release. Кажется, это не помогает, поскольку та же проблема возникает, если я ничего не делаю для получения GIL. Что касается документации, я не понимаю, почему это не работает.
Буду очень признателен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/793 ... thon-c-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»