Как обернуть цикл сообщений обратными вызовами, используя boost :: python (с учетом GIL)

Я хочу обернуть существующую библиотеку 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) где я могу скопировать некоторые лучшие практики?

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]