我正在尝试编写一个队列阅读器,它遍历一个大文件并在每行上运行python函数,然后再将其传递给实际操作。
我使用private string log;
public string Log
{
get => log;
set => log = value;
}
来读取单个string_input_producer
文件。然后,我使用.tsv
创建一个队列,并使用tf.TextLineReader
增强每一行。这样做,我注意到一些内存泄漏只有在调用tf.py_func
时才会生效(是的,即使是noop)。
运行以下代码会产生以下结果:
tf.py_func
正如您所看到的,运行不带$ python test_memory.py 2> /dev/null
run WITHOUT tf.py_func
00001/50000, 1.4260% mem
05001/50000, 1.4512% mem
10001/50000, 1.4512% mem
15001/50000, 1.4512% mem
20001/50000, 1.4512% mem
25001/50000, 1.4516% mem
30001/50000, 1.4516% mem
35001/50000, 1.4516% mem
40001/50000, 1.4516% mem
45001/50000, 1.4516% mem
50000/50000, 1.4516% mem
===========================
run WITH tf.py_func
00001/50000, 1.4975% mem
05001/50000, 1.5051% mem
10001/50000, 1.5066% mem
15001/50000, 1.5081% mem
20001/50000, 1.5110% mem
25001/50000, 1.5137% mem
30001/50000, 1.5148% mem
35001/50000, 1.5165% mem
40001/50000, 1.5195% mem
45001/50000, 1.5210% mem
50000/50000, 1.5235% mem
===========================
的代码可以保持已使用的内存稳定,而使用python函数运行它会使其不断增加。对于行数较大的文件,此效果更为明显。
tf.py_func
:
test_memory.py
我很感激任何指针或想法如何进一步调试这个?!也许有办法看看python函数是否保留了某种存储空间?
谢谢!