gpt4 book ai didi

python - 将大量数据写入标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:55 25 4
gpt4 key购买 nike

我正在向标准输入写入大量数据。

如何确保它不会阻塞?

p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write('A very very very large amount of data')
p.stdin.flush()
output = p.stdout.readline()

在我读取一个大字符串并写入后,它似乎卡在 p.stdin.write() 处。

我有大量文件,这些文件将按顺序写入标准输入(>1k 文件)

所以发生的是我正在运行一个循环

#this loop is repeated for all the files
for stri in lines:
p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write(stri)
output = p.stdout.readline()
#do some processing

它不知何故卡在文件号。 400. 该文件是一个长字符串的大文件。

我确实怀疑这是一个阻塞问题。

这只会在我从 0 迭代到 1000 时发生。但是,如果我从文件 400 开始,则不会发生错误

最佳答案

为了以可移植的方式避免死锁,在一个单独的线程中写给 child :

#!/usr/bin/env python
from subprocess import Popen, PIPE
from threading import Thread

def pump_input(pipe, lines):
with pipe:
for line in lines:
pipe.write(line)

p = Popen(path, stdin=PIPE, stdout=PIPE, bufsize=1)
Thread(target=pump_input, args=[p.stdin, lines]).start()
with p.stdout:
for line in iter(p.stdout.readline, b''): # read output
print line,
p.wait()

参见 Python: read streaming input from subprocess.communicate()

关于python - 将大量数据写入标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322034/

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