Python и FIFO

Я пытался понять FIFO, используя Python под Linux, и обнаружил странное поведение, которого я не понимаю.

Ниже приводится 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)))

Я также создал два FIFO, используя mkfifo input и mkfifo output .

Что я не понимаю вот почему, когда я запускаю сервер (с входным выходом python fifoserver.py ) и клиент (с python fifoclient.py ) с двух консолей после некоторых запросов, клиент вылетает с " ошибка сломанной трубы на f.flush () . Обратите внимание, что до сбоя я видел от нескольких сотен до нескольких тысяч правильно обработанных запросов.

В чем проблема в моем коде?

6
задан 6502 22 February 2011 в 22:30
поделиться