我试图在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输入和mkfifo输出创建了两个FIFO.
我不明白为什么当我运行服务器(使用python fifoserver.py输入输出)和客户端(使用python fifoclient.py)来自两个控制台后,一些请求客户端崩溃与f上的“管道损坏”错误.flush().请注意,在崩溃之前,我已经看到从几百到几千个正确处理的请求运行正常.
我的代码有什么问题?
最佳答案