从C扩展跟踪CPython对象的生命周期

时间:2012-03-06 02:59:12

标签: c++ python weak-references

我有一些C ++代码可以将事件传递给Python对象。观察者保持为weak_ptr,因此他们不必取消注册。

这适用于C ++,但是桥接弱指针和Python弱引用很麻烦(我还希望Python事件处理程序不会被订阅保留,就像在C ++代码中一样)。为了拥有一个实时观察者,当对象处于活动状态时,某些东西需要有一个指向它的共享指针,所以归结为让Python中的观察者控制C ++观察者对象的生命周期。

到目前为止,我提出的方法涉及大量的样板和中间对象(例如,为保持C ++观察者的类型创建另一个PyTypeObject,并对Python观察者进行弱引用并将其设置为Python观察者,因此它就死了。)

问题是,有没有明显的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我会在C ++模块上编写一个python包装器,并在python包装器中调度到python观察器。那就够了吗?

当你提到某些东西需要有一个共享指针时,如果该共享指针在堆栈上,直到给定观察者返回它是否足够?