LinuxでPythonを使用してFIFOを理解しようとしましたが、理解できない奇妙な動作を見つけました。
以下はfifoserver.py
import sys
import time
def readline(f):
s = f.readline()
while s == "":
time.sleep(0.0001)
s = f.readline()
return s
while True:
f = open(sys.argv[1], "r")
x = float(readline(f))
g = open(sys.argv[2], "w")
g.write(str(x**2) + "\n")
g.close()
f.close()
sys.stdout.write("Processed " + repr(x) + "\n")
そしてこれはfifoclient.py
import sys
import time
def readline(f):
s = f.readline()
while s == "":
time.sleep(0.0001)
s = f.readline()
return s
def req(x):
f = open("input", "w")
f.write(str(x) + "\n")
f.flush()
g = open("output", "r")
result = float(readline(g))
g.close()
f.close()
return result
for i in range(100000):
sys.stdout.write("%i, %s\n" % (i, i*i == req(i)))
mkfifo input
また、とを使用して2つのFIFOを作成しましmkfifo output
た。
私が理解していないのは、いくつかのリクエストの後に2つのコンソールからサーバー(with python fifoserver.py input output
)とクライアント(with )を実行すると、クライアントpython fifoclient.py
が「壊れたパイプ」エラーでクラッシュする理由f.flush()
です。クラッシュする前に、数百から数千の正しく処理されたリクエストが正常に実行されていることを確認したことに注意してください。
私のコードの問題は何ですか?