Hri*_*nev 6 python ctypes reference-counting
我正在使用ctypes从python中使用C库.有一个带有void*参数的回调函数我用作ctypes.py_object.注册回调时,对象指针将提供给库.但是当它不再从python代码引用时,它应该被销毁.我希望它能够存活,直到调用回调函数.我怎么做?
callback_t=ctypes.CFUNCTYPE(None, ctypes.py_object)
clib.register_callback.argtypes=[callback_t, ctypes.py_object]
clib.register_callback.restype=None
class Object:
def __init__(self, val):
self.val=val
def callback(obj):
print(obj.val)
callback_c=callback_t(callback)
def calledByOtherCode(val):
clib.register_callback(callback_c, Object(val))
Run Code Online (Sandbox Code Playgroud)
您可以尝试手动增加/减少引用计数:
def calledByOtherCode(val):
o = Object(val)
pyo = ctypes.py_object(o)
ctypes.pythonapi.Py_IncRef(pyo)
clib.register_callback(o)
def callback(obj):
print(obj.val)
pyobj = ctypes.py_object(obj)
ctypes.pythonapi.Py_DecRef(pyobj)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |