У меня есть функция, которая читает файл Parquet, фильтрует строки на основе диапазона дат, а затем пытается освободить память. Я пробовал использовать явные операторы del, вызывать gc.collect() и даже использовать функции пула памяти PyArrow, такие как pa.jemalloc_set_decay_ms(0) иpool.release_unused(). Несмотря на эти усилия, использование резидентной памяти моим процессом продолжает расти с течением последующих итераций.
Вот упрощенная версия моего кода:
Код: Выделить всё
import psutil
import time
import gc
from datetime import datetime
import pyarrow.parquet as pq
import pyarrow.compute as pc
import pyarrow as pa
def print_memory_usage():
process = psutil.Process()
mem_info = process.memory_info()
print(f"Memory Usage: {mem_info.rss / 1024 / 1024:.2f} MB")
def mem_and_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Execution Time: {end_time - start_time:.6f} seconds")
print_memory_usage()
return result
return wrapper
@mem_and_time
def test_func_pyarrow():
# Read Parquet file into a PyArrow Table
# Memory usage increasing also happens when I call
# pd.read_parquet or pl.read_parquet
table = pq.read_table("/Users/test.parquet")
del table
gc.collect()
pa.jemalloc_set_decay_ms(0)
pool = pa.default_memory_pool()
pool.release_unused()
return None
if __name__ == "__main__":
# Run the function repeatedly
for _ in range(1000):
test_func_pyarrow()
time.sleep(20)
Код: Выделить всё
Execution Time: 0.985749 seconds
Memory Usage: 4542.09 MB
Execution Time: 0.873830 seconds
Memory Usage: 5926.19 MB
...
Execution Time: 0.774829 seconds
Memory Usage: 7985.73 MB
Python: 3.13.1
Pandas: 2.2.3
PyArrow: 19.0.0
ОС: MacOs Sequoia 15.3.1
Подробнее здесь: https://stackoverflow.com/questions/794 ... quet-files
Мобильная версия