Я хочу обернуть существующую библиотеку C ++, которая включает в себя блокировка цикла сообщений а также вызов функций-обработчиков за питон с помощью повышение :: питона. Например.:
import my_boostpython_lib
def my_handler_fn():
do_something()
md = my_boostpython_lib.message_dispatcher()
# calls a C++ object method and blocks
md.run_message_loop(my_handler_fn)
Вызов функции Python из C ++ не проблема, но цикл сообщений должен освободить GIL
поскольку в противном случае он блокирует весь интерпретатор Python (см. Вот, Вот и связанный форсированный билет)
Как указано Вот важно заблокировать GIL
еще раз перед вызовом функции Python.
В принципе это звучит понятно для меня, но мне интересно, есть ли какие-нибудь элегантные решения, которые показывают, как это можно сделать.
Например. было бы очень хорошо, если бы мне пришлось изменять только оболочку boost :: python (вместо того, чтобы изменять библиотеку, которую я хочу обернуть)
Вы знаете какой-нибудь рабочий пример который включает в себя повышение :: питона, обратные вызовы используя объектно-ориентированный подход (и, возможно, блокирующие функции, которые освобождают GIL
) где я могу скопировать некоторые лучшие практики?
Задача ещё не решена.