[Python] 10. PIPE

2019. 3. 14. 14:25Python관련/Python

PIPE

사실 나도 파이프 통신에 대해서 알아 가는 중이다. 


그렇기에 정리하고 기록하는 중이며 아래 내용은 명확한 정답이 아닌 


내가 이해하는대로 글을 적고 수정하는 내용이므로 단순히 참고하는데 이용했으면 한다. 


지금까지 내가 이해한 내용은 아래와 같다.


리눅스에서 IPC 즉 프로세스간의 통신에서 통신하는 방법은 signal, pipe, shared memory 등이 있다. 


이중 Linux에서 쉽게 구현가능한 IPC 통신은 pipe통신이다.


01. Named Pipe 통신


 구조상으로 알기로는 단순히 파일 통신으로 보인다. 하지만 데이터의 흐름은 단방향으로 


프로세스 A에서 데이터를 보내고 프로세스 B에서 데이터를 수신하는 구조로 되어 있다. 


이구조에서 특정 이름이 정해진 파일이 생성되며 파일을 경유지로 통신을 가능하게 되는 것이다.


뭐 이론은 복잡한데 구조는 생각보다 쉽게 되어 있다. 


ex) 실제 활용에 편리하게 non blocking 수신 구조를 예제로 활용한다. 


 import os

 import time

 import errno 


 def Receiver():

     path="pipe"

     pipe=os.open(path,os.O_RDONLD | os.O_NONBLOCK)

     filfo=os.read(pipe,100).decode('ascii')

     if fifo!="":

          print(fifo)

     os.close(pipe)



def __Main__():

     while 1:

          try:

               Receiver()

          except OSError as err:

               if err.errno==11:

                    continue

          except:

               close()


          print("wait")

          time.sleep(0.5) #0.5 초 delay


__Main__()





ex) 송신 구조

 import os

 def sender(Sender_Msg):

     path="pipe"

     

     if os.path.exists(path)==False:

          os.mkfifo(path)

     fifo=open(path,"w")

     fifo.write(Sender_Msg)

     fifo.close()


 sender()


'Python관련 > Python' 카테고리의 다른 글

[Python] 12. 만든 모듈 추가하기 From Import  (0) 2019.04.02
[Python] 11.Thread  (0) 2019.03.14
[Python] 09. 함수  (0) 2019.03.14
[Python] 08. 반복문  (0) 2019.03.14
[Python]07. 컨테이너  (0) 2019.03.11