Насколько я понимаю, типичные манипуляции с GIL включают, например, блокировку операций ввода-вывода.Следовательно, хотелось бы снять блокировку перед операцией ввода-вывода и восстановить ее после ее завершения.
В настоящее время я сталкиваюсь с другим сценарием с расширением C: я создаю X окон, которые подвергаются воздействиюPython через класс Canvas
.Когда метод show()
вызывается для экземпляра, новый поток пользовательского интерфейса запускается с использованием PyThreads
(с вызовом PyThread_start_new_thread
).Этот новый поток отвечает за рисование в окне X с использованием кода Python, указанного в методе on_draw
подкласса Canvas
.Чистый цикл событий C запускается в главном потоке, который просто проверяет наличие событий в окне X и на данный момент захватывает только WM_DELETE_EVENT
.
Так что у меня потенциально много потоков (по одному для каждогоОкно X), которые хотят выполнить код Python и основной поток, который вообще не выполняет код Python.
Как мне выпустить / получить GIL, чтобы потоки пользовательского интерфейса могли нормально входить в интерпретатор