vous devriez être en mesure de le faire en disposant l'objet
mydll = ctypes.CDLL('...')
del mydll
mydll = ctypes.CDLL('...')
EDIT: Commentaire de Hop est juste, ce délie le nom, mais la collecte des ordures ne se passe pas rapidement, en fait, je même doute qu'il libère même la bibliothèque chargée.
ctypes ne semble pas fournir un moyen propre de libérer des ressources, il ne fournit qu'un champ _handle
à la poignée dlopen ...
La seule façon que je vois, vraiment, vraiment non manière propre, est de débloquer le système de manière dépendante du système, mais il est très très sale, car de plus ctypes conserve des références internes à ce handle. Donc, le déchargement prend quelque chose de la forme:
mydll = ctypes.CDLL('./mylib.so')
handle = mydll._handle
del mydll
while isLoaded('./mylib.so'):
dlclose(handle)
Il est tellement sale que je ne vérifié fonctionne à l'aide:
def isLoaded(lib):
libp = os.path.abspath(lib)
ret = os.system("lsof -p %d | grep %s > /dev/null" % (os.getpid(), libp))
return (ret == 0)
def dlclose(handle)
libdl = ctypes.CDLL("libdl.so")
libdl.dlclose(handle)
Avez-vous trouvé une meilleure réponse que ma façon laide? Sinon peut-être, vous devriez demander sur leur liste de diffusion, et si ce n'est pas présent, signalez-le. 'del' devrait appeler la fonction pour récupérer les ressources! –