gpt4 book ai didi

python - Python Popen.communicate() 内存限制的替代方案?

转载 作者:IT老高 更新时间:2023-10-28 20:55:41 25 4
gpt4 key购买 nike

我有以下 Python 代码块(运行 v2.7),当我处理大型(几 GB)文件时,会引发 MemoryError 异常:

myProcess = Popen(myCmd, shell=True, stdout=PIPE, stderr=PIPE)
myStdout, myStderr = myProcess.communicate()
sys.stdout.write(myStdout)
if myStderr:
sys.stderr.write(myStderr)

在阅读 documentation to Popen.communicate() ,似乎正在进行一些缓冲:

Note The data read is buffered in memory, so do not use this method if the data size is large or unlimited.

有没有办法禁用这种缓冲,或者在进程运行时强制定期清除缓存?

我应该在 Python 中使用什么替代方法来运行将千兆字节数据流式传输到 stdout 的命令?

我应该注意我需要处理输出和错误流。

最佳答案

我想我找到了解决办法:

myProcess = Popen(myCmd, shell=True, stdout=PIPE, stderr=PIPE)
for ln in myProcess.stdout:
sys.stdout.write(ln)
for ln in myProcess.stderr:
sys.stderr.write(ln)

这似乎使我的内存使用量下降到足以完成任务。

更新

我最近发现了一种在 Python 中处理数据流的更灵活的方法,使用 threads .有趣的是,Python 在某些方面很差,以至于 shell 脚本可以轻松完成!

关于python - Python Popen.communicate() 内存限制的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com