[英]Python long time script running huge RAM and swap memory consumption
我正在嘗試編寫 python 腳本,該腳本將定期(每 20 毫秒)從 USB 端口讀取數據並將獲得的數據寫入 .csv 文件。 程序需要在 RaspberryPi 3B 上運行至少 1 周。 但現在我面臨 RAM 和交換 memory 消耗的問題。 在運行 Linux 9 小時后,在終端中僅用一個詞“Killed”就終止了我的進程。 我已經使用 psutil 模塊檢查了 RAM 使用情況,看起來問題出在 RAM 和交換使用情況(崩潰前 1 分鍾,整個進程使用了 100% 的交換,並且該進程使用了 57% 的 RAM)。 我試圖通過使用 memory 探查器找出這個 memory 泄漏發生在哪里,所以看起來問題出在csv_append
function(運行 10 分鍾后它增加了 7Mb 的數據),但是當我仔細查看這個 function使用@profiler 裝飾器似乎沒有泄漏。
這是這個 function 的示例:
def _csv_append(self,data):
"""
Appends to .csv file
"""
with open(self.last_file_name, 'a') as csvfile:
csv_writter = csv.writer(csvfile)
csv_writter.writerow(data)
有什么我可以在我的程序中改進的,這樣它就會停止 memory 泄漏並長時間工作而不會被 Linux OOM 殺死? 在主循環 function 中,除了讀取字節,使用int.from_bytes()
將它們解釋為int
,調用csv_append()
並等待是否還有一些時間以確保 0.02s 周期
謝謝您的幫助:)
使用 memory 分析器分析 memory 消耗,沒有任何信息可以提供幫助。 似乎是csv_append()
中的問題,但沒有泄漏每個周期刪除所有變量並使用垃圾收集器gc.collect()
我剛剛運行了以下小腳本:
import csv
Iterations = 1_000
def csv_append(data):
with open("log.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow(data)
for i in range(Iterations):
data = [i, "foo", "bar"]
csv_append(data)
並使用/usr/bin/time -l./main.py
獲得了一些基本統計信息:
迭代 | 即時的 | Peak_mem_footprint |
---|---|---|
1_000 | 0.06 | 5_718_848 |
1_000_000 | 22.08 | 5_833_664 |
我什至沒有清除data
,memory 幾乎沒有變化,迭代次數超過 1000 次。 我不認為這是 CSV 文件打開/寫入。
我認為您的程序/設置中還需要考慮其他事項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.