python线程和c++线程的区别_Python、线程、吉尔和C++

有没有办法让boost::python控制每次与python交互的python GIL?在

我正在用boost::python编写一个项目。我试图为外部库编写C++包装,并用Python脚本控制C++库。我不能更改外部库,只能更改包装程序。我说我是在写一个功能测试的应用程序

外部库是用C语言编写的,它使用函数指针和回调来完成许多繁重的工作。它是一个消息传递系统,因此当消息传入时,会调用回调函数。在

我在我的库中实现了一个观察者模式,这样多个对象可以监听一个回调。我有所有的主要球员适当的出口,我可以很好地控制到一定程度。在

外部库创建线程来处理消息、发送消息、处理等。其中一些回调可能是从不同的进程调用的,我最近发现python不是线程安全的。在

这些观察者可以在python中定义,所以我需要能够调用python,python需要在任何时候调用我的程序。在

我把物体和观察者设置成这样class TestObserver( MyLib.ConnectionObserver ):

def receivedMsg( self, msg ):

print("Received a message!")

ob = TestObserver()

cnx = MyLib.Conection()

cnx.attachObserver( ob )

然后创建一个发送到连接的源,然后调用receivedMsg函数。在

所以是个常客源.send(‘MSG’)将进入我的C++应用程序,转到C库,它将发送消息,连接将得到它,然后调用回调,它返回到我的C++库,并且连接尝试通知所有的观察者,在这里,Python类是这里的,所以它调用该方法。在

当然,回调是从连接线程调用的,而不是从主应用程序线程调用的。在

昨天一切都崩溃了,我无法发送一条消息。在翻阅了Cplusplus sig的档案之后,我了解了GIL和一些漂亮的函数来锁定东西。在<> P>我的观察器类的C++ Python包装看起来像现在的

^{pr2}$

不过,当我试着发送250多条这样的信息时,这是有效的for i in range(250)

source.send('msg")

它又崩溃了。和以前一样的信息和症状PyThreadState_Get: no current thread

所以我想这次我的C++应用程序有问题,而不是调用Python。在

我的问题是,有没有什么方法可以让boost::python在每次与python的交互中处理GIL本身?我在代码中找不到任何东西,而且很难找到源.send调用进入boost\u python:(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值