Python BSDDB データベースを取得しました。もちろんハードディスクに保存されています。いくつかのエントリを削除しても、ドライブ上のファイルは小さくなりません (その結果、非常に速く大きくなります...)
utDelList = []
urlsDelList = []
for ut in iter(self.urls2task):
tmp = string.split(ut, ":")
uid = tmp[1]
url = cPickle.loads(self.urls[int(uid)])
urlsDelList.append(uid)
utDelList.append(ut)
del self.urlsDepth[uid]
del self.urlsStatus[uid]
del url
for ut in utDelList:
del self.urls2task[ut]
for uid in urlsDelList:
del self.urls[int(uid)]
(...)
#synchronize all files
self.sync()
私の最後の希望は、ファイルを閉じて再度開くことにより、野蛮な方法でフラッシュを強制することでした
#close all files & start them again, eg
self.tasks.close()
self.urls2task.close()
self.tasks = bsddb.rnopen(filepath)
self.urls2task = bsddb.hashopen
ここで重要な要素は self.tasks エントリです。すべてのファイルの中で最も速く大きくなります。pickling-save はそれを削除する方法を変更しますか? また、ファイルを削除した後もエントリが保持されるのはなぜですか? 私は感謝しています4任意の提案(ここに最初の投稿:))