[PYTHON] 파이썬 읽기라는 PIPE
PYTHON파이썬 읽기라는 PIPE
나는 리눅스에서 명명 된 파이프를 가지고 있고 그것을 파이썬에서 읽고 싶다. 문제는 파이썬 프로세스가 하나의 코어 (100 %)를 '소비'한다는 것입니다. 내 코드는 다음과 같습니다.
FIFO = '/var/run/mypipe'
os.mkfifo(FIFO)
with open(FIFO) as fifo:
while True:
line = fifo.read()
나는 '수면'이 파이프로부터 어떤 입력 데이터를 잃어 버릴 상황이나 과정을 도울 것인지 물어보고 싶다. 나는 데이터 입력 빈도를 알지 못하도록 입력을 제어 할 수 없다. 내가 선택 및 설문 조사에 대해 읽었지만 내 문제에 대한 모범을 찾지 못했습니다. 마지막으로 100 % 사용량이 데이터 입력 (손실 또는 무언가?)에 어떤 영향을 주는지 묻고 싶습니다.
편집 : 나는 루프를 깰 싶지 않아요. 프로세스가 계속 실행되고 파이프의 데이터를 듣고 싶습니다.
해결법
-
==============================
1.일반적인 UNIX 방식에서, read (2)는 파일의 끝을 나타내는 0 바이트를 반환하는데 이는 다음을 의미 할 수 있습니다.
일반적인 UNIX 방식에서, read (2)는 파일의 끝을 나타내는 0 바이트를 반환하는데 이는 다음을 의미 할 수 있습니다.
귀하의 경우 fifo.read ()는 파일 설명자를 닫았 기 때문에 빈 문자열을 반환합니다.
이 경우를 감지하고 루프를 벗어나야합니다.
reader.py:
import os import errno FIFO = 'mypipe' try: os.mkfifo(FIFO) except OSError as oe: if oe.errno != errno.EEXIST: raise print("Opening FIFO...") with open(FIFO) as fifo: print("FIFO opened") while True: data = fifo.read() if len(data) == 0: print("Writer closed") break print('Read: "{0}"'.format(data))
세션 예제
터미널 1:
$ python reader.py Opening FIFO... <blocks>
터미널 2:
$ echo -n 'hello' > mypipe
터미널 1:
FIFO opened Read: "hello" Writer closed $
아마도 작가가 닫은 후에도 계속 파이프에서 글을 듣고 싶다는 뜻입니다.
이를 효율적으로 수행하려면 다음과 같은 사실을 활용할 수 있어야합니다.
여기에서는 열린 루프와 읽기 루프 주위에 다른 루프를 추가합니다. 이렇게하면 파이프가 닫히면 코드가 다시 열리므로 다른 작성기가 파이프를 열 때까지 차단됩니다.
import os import errno FIFO = 'mypipe' try: os.mkfifo(FIFO) except OSError as oe: if oe.errno != errno.EEXIST: raise while True: print("Opening FIFO...") with open(FIFO) as fifo: print("FIFO opened") while True: data = fifo.read() if len(data) == 0: print("Writer closed") break print('Read: "{0}"'.format(data))
터미널 1:
$ python reader.py Opening FIFO... <blocks>
터미널 2:
$ echo -n 'hello' > mypipe
터미널 1:
FIFO opened Read: "hello" Writer closed Opening FIFO... <blocks>
터미널 2:
$ echo -n 'hello' > mypipe
터미널 1:
FIFO opened Read: "hello" Writer closed Opening FIFO... <blocks>
... 등등.
파이프에 대한 man 페이지를 읽으면 자세한 내용을 알 수 있습니다.
from https://stackoverflow.com/questions/39089776/python-read-named-pipe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 : 소수점 이하 1 자리 가져 오기 [중복] (0) | 2018.11.19 |
---|---|
[PYTHON] 파이썬을위한 것은 PHP를위한 '폭발'무엇입니까? (0) | 2018.11.19 |
[PYTHON] Excel에서 차트를 파이썬을 사용하여 이미지로 내보내기 (0) | 2018.11.19 |
[PYTHON] django-tastypie에 POST 요청이있는 파일을 어떻게 업로드합니까? [복제] (0) | 2018.11.19 |
[PYTHON] 파이썬으로 .doc 파일 읽기 (0) | 2018.11.19 |