如何使用boost::python用回调包装消息循环(记住GIL)

2024-04-25 09:47:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想包装一个现有的C++库,它包含了<强>阻塞消息循环>和<强>调用处理函数<强> Python 使用<强> Boo::Python 。例如:

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)

从C++调用Python函数没有问题,但是消息循环需要释放^ {< CD1>},否则它将阻塞整个Python解释器(参见herehere和相关的boost ticket

如前所述here在调用Python函数之前再次锁定GIL非常重要。你知道吗

原则上,这听起来是可以理解的,但我想知道是否有任何优雅的解决方案,其中显示如何可以做到这一点。 例如,如果我只需要修改boost::python包装器(而不是修改我想要包装的库),那就太好了

你知道任何一个使用面向对象方法(可能还有释放GIL的阻塞函数)的工作示例吗,它涉及到boost::python回调,我可以从中复制一些最佳实践?你知道吗


Tags: 函数import消息messageheremylibmd

热门问题