У меня есть приложение на 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
Сбой PyEval_RestoreThread при вызове matplotlib через Python C API ⇐ Python
Программы на Python
-
Anonymous
1737066835
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. Что касается документации, я не понимаю, почему это не работает.
Буду очень признателен за любую помощь.
Подробнее здесь: [url]https://stackoverflow.com/questions/79363218/pyeval-restorethread-crash-when-calling-matplotlib-via-python-c-api[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия