首页 > 解决方案 > 来自 memory_profiler 的 @profile 装饰器正在改变代码的行为,特别是 pandas 函数

问题描述

我正在使用库memory_profiler来运行一些内存分析,它似乎工作正常,除非我在一个正在读取文件@profile的函数上使用装饰器。该函数在没有装饰器的情况下工作,但无法使用装饰器读取 csv 文件。csvpandas

重现错误的最少代码如下,它需要在.py文件中才能使库正常工作。它将创建一个带有导致失败的文本字符串的小 csv 文件(仅当@profile存在时,否则正确读取)。预期的行为是使用第一个函数调用(无分析)将 csv 打印为 DataFrame,但在第二个函数调用(相同的函数,但分析)时失败。

行为变化是否有解释?

#!/usr/bin/env python
#  
import pandas as pd
from memory_profiler import profile

file_path = 'test.csv'
with open(file_path, 'w') as file:
    file.write('col_1;"weird_col(=CONCATENATE(""    "",G2,"": str = \'"",A2,""\'""))"\n')
    file.write('"bla.""default"",";\n')

def func1(file_path):
    df = pd.read_csv(file_path, sep=';')
    return df

@profile
def func2(file_path):
    df = pd.read_csv(file_path, sep=';')
    return df

print('No profile:')
df = func1(file_path)
print(df)
print('Worked fine!\n')
print('WITH profile:')
df2 = func2(file_path)
print(df2)

标签: pythonpandascsvmemory-profiling

解决方案


推荐阅读