os.mkfifo을 프로그램 간 간단한 통신에 사용하고 싶습니다. 나는 루프에서 FIFO를 읽는 데 문제가 있습니다.fifo - 루프에서 읽기
내가 장난감과 함께 일하는 독자와 작가가있는이 장난감의 예를 생각해보십시오. FIFO에 들어가는 모든 것을 읽을 수있는 루프에서 독자를 실행할 수 있기를 원합니다.
# reader.py
import os
import atexit
FIFO = 'json.fifo'
@atexit.register
def cleanup():
try:
os.unlink(FIFO)
except:
pass
def main():
os.mkfifo(FIFO)
with open(FIFO) as fifo:
# for line in fifo: # closes after single reading
# for line in fifo.readlines(): # closes after single reading
while True:
line = fifo.read() # will return empty lines (non-blocking)
print repr(line)
main()
그리고 작가 :
# writer.py
import sys
FIFO = 'json.fifo'
def main():
with open(FIFO, 'a') as fifo:
fifo.write(sys.argv[1])
main()
나는 while
루프 내에서 python reader.py
이후 python writer.py foo
, "foo는"이 인쇄됩니다하지만 FIFO가 폐쇄되고 독자가 종료됩니다 (또는 회전을 실행하면). 독자가 계속 루프에 머물러 있기를 바란다. 그래서 나는 작가를 여러 번 실행할 수있다.
편집
나는 문제를 처리하기 위해이 코드를 사용
def read_fifo(filename):
while True:
with open(filename) as fifo:
yield fifo.read()
을하지만 어쩌면 그것을 처리하는 몇 가지 깔끔한 방법은 ... 대신 반복적으로 파일을 여는,이
관련
필자는 여러 작성자의 경우 더 많은 것을 사용해야한다고 가정합니다. 여기서는 작성자가 서로 다른 FIFO를 닫을 것이기 때문입니다. 그리고 한 작가의 데이터가 다른 작가의 데이터와 섞여있을 수도 있습니다. –
그들은 서로를 닫지 않으며 기록 된 데이터가 충분히 작 으면 방해받지 않습니다. 서로를 간섭하지 않으면 서 얼마나 큰 데이터 팩이 될 수 있는지 알려주는 상수'PIPE_BUF '가 있습니다. – glglgl