如何使用python3 c-api缓存模块中的对象?

时间:2014-01-30 16:30:20

标签: python python-3.x

我正在使用python3 c-api实现容器类型。

创建的对象应放在模块拥有的缓存中。当对象被破坏时,应该从缓存中删除它们。缓存本身不会在缓存的对象上保留引用计数。

我不想在不同的解释器之间共享对象,因此缓存必须由加载的模块实例拥有。我想我可以把它放在模块状态结构中,当对象被破坏时可以通过PyState_FindModule()和PyModule_GetState()来实现。

如果由于某种原因重新加载模块,则此解决方案不起作用。

假设我在重新加载之前创建了一个对象,并将其放入初始模块状态找到的缓存中。我保留对创建的对象的引用,重新加载模块然后删除引用。当析构函数运行时,它将获得具有新缓存的新模块状态,因此如果插入了对象,我将无法从缓存中删除该对象。

0 个答案:

没有答案