非遮断cat

非遮断cat

aplay標準入力を受け入れる速度がかなり遅いプログラムがあります。標準入力(たとえばパイプを介して)に書き込むプログラムは、書き込み中に多くをブロックする傾向があります。入力を待つ必要はありません(オーディオの中断が発生したため)。標準入力(パイプなど)は、作成中に多くをブロックする傾向があります。入力を提供するプログラムは非常に迅速に操作を実行できますが、時々途切れることがあり、入力の生成が中断されます。入力を待つ必要はありません(オーディオの中断が発生したため)。

stdinから多くのデータを読み込み、stdout書き込みが完了するまでRAMに保持できるプログラムはありますか?

Cでのみ5分で停止し、5分間停止しなかったPythonプログラムと同じです。

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が送信されたら再開できますか?

こんなのが必ず存在するんでしょう? Googleに何をすべきかわかりません。

ベストアンサー1

おすすめ記事