非阻塞猫(从 stdin 读取尽可能多的数据并将其保存在 RAM 中,直到写阻塞 stdout 可用)

非阻塞猫(从 stdin 读取尽可能多的数据并将其保存在 RAM 中,直到写阻塞 stdout 可用)

我有一个程序(可能是也可能不是aplay)接受其标准输入的速度相当慢。写入所述标准输入(例如通过管道)的程序往往会在写入时阻塞很多。需要等待输入是不可接受的(因为这会导致音频中断)。所说的标准输入(例如通过管道)往往会在写入时阻塞很多。向其提供输入的程序可以相当快地完成此操作,但偶尔会出现口吃并时不时地停止生成输入。需要等待输入是不可接受的(因为这会导致音频中断)。

是否有一个程序可以从 stdin 读取一堆数据并将其保存在 RAM 中直到 stdout 写入完成?

有点像这个 Python 程序,我在五分钟内就卡住了,只是用 C 语言,而在五分钟内没有卡住:

import threading
import sys
import queue

stdin=sys.stdin.detach().detach() # detach TextIOWrapper, then detach BufferedWriter for a raw input stream.
stdout=sys.stdout.detach()

q=queue.Queue()

def worker(q,stdout):
    while True:
        data=q.get()
        if data is None:
            return
        stdout.write(data)

threading.Thread(target=worker, args=(q,stdout)).start()


data=stdin.read(8192)
while data:
    q.put(data)
    data=stdin.read(8192)
q.put(None)

也许具有在 RAM 中保存可配置数量的数据等功能,而不是仅仅等到用完为止?也许暂停读取输入并在发送 SIGUSR1 和 SIGUSR2 时恢复它?

像这样的东西一定存在,不是吗?只是我不知道该谷歌什么。

相关内容