簡體   English   中英

如何根據可用的 memory 確定批次的大小?

[英]How can I determine the size of a batch based on the available memory?

我需要讀取一個任意大的文件,解析它(這意味着在執行此操作時將一些數據保留在 memory 中),然后將文件的新版本寫入文件系統。 鑒於 memory 約束,我需要增量或分批讀取文件。 但是,批次越大越好(因為用於解析文件每一行的信息包含在文件的其他行中)。

顯然,我可以通過類似的方式獲取有關 memory 使用情況的信息

import psutil
psutil.virtual_memory()

它還返回 memory 可用百分比。 有關更多信息,請參閱此答案https://stackoverflow.com/a/11615673/3924118

我想根據可用的 memory 和當前 Python 進程使用和保留的 memory 來確定批次的大小。

顯然,我可以得到當前 Python 進程使用的 memory

import os
import psutil
process = psutil.Process(os.getpid())
print(process.memory_info().rss)  # in bytes 

有關詳細信息,請參閱https://stackoverflow.com/a/21632554/3924118

So, is there a way of having an adaptive batch size (or generator), based on the available memory dedicated to the current Python process and the total system available memory, so that I can read as many lines as the available memory allows at a時間,然后讀取下一批線等? 換句話說,我需要增量讀取文件,使得一次讀取的行數最大化,同時滿足 memory 約束(在某個閾值內,例如,直到 90% 的 memory 被使用)。

我會一次固定您正在讀取的數據的大小,而不是嘗試隨機填充您的 memory。 以固定塊讀取數據。 處理起來容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM