我目前正在编写一个 Python 守护进程,它实时监控日志文件并根据结果更新 Postgresql 数据库中的条目。该过程只关心出现在日志文件中的唯一键以及从该键中看到的最新值。
我正在使用轮询方法,每 10 秒处理一个新批次。为了减少整个数据集以避免对数据库进行无关更新,我只将键和最新值存储在字典中。根据过去 10 秒内的活动量,此字典可能包含 10-1000 个唯一条目。然后 dict 得到“处理”并将这些结果发送到数据库。
我主要关心的是内存管理和随着时间的推移(几天、几周等)的字典。由于这是一个不断运行的守护进程,内存使用量会根据字典的大小而膨胀,但不会适当缩小。我尝试使用标准取消引用重置 dict,并在处理批处理后使用 dict.clear() 方法,但注意到内存使用没有变化(FreeBSD/top)。似乎强制 gc.collect() 确实恢复了一些内存,但通常只有 50% 左右。
你们对我应该如何进行有什么建议吗?在我的过程中我还能做些什么吗?如果您看到围绕该问题的不同道路,请随时加入 :)