파이썬에서 실행중인 파이썬에 접근할수있나요? 초기화가 오래 걸리는 프로세스에 다른 프로세스가 질의하여 결과를 받기.

조회수 2231회

지금 리눅스로 파이썬 시스템을 구축중인데 로딩시간이 너무 걸려서 로딩을 먼저 시켜놓고 접근할려고 합니다 그래서 일단 1번엔 #python main.py 로 실행해놓고 로딩이 끝나면 while 로 잡아놓고 대기하고있습니다
python insert.py "텍스트입력" 가 실행되면 텍스트를 main.py 에 날려주고 출력결과를 return 받고싶은데 이게 혹시 가능할까요?

  • 프로세스간 통신은 잘 모르겠지만 저라면 insert.py에서 실행한 결과를 'insert.txt'로 저장하고 main.py는 'insert.txt'가 디렉토리에 있는지 1분마다(혹은 그 이상) 검사하고 있으면 로직을 실행하게 할 겁니다. 알 수 없는 사용자 2020.5.11 11:34
  • 네 가능합니다. dbwodlf3 2020.5.11 11:46

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    네 가능합니다.

    저도 비슷한 경험이 있었습니다.

    저같은 경우에는 WebServer에서 사용자의 Request를 받으면 해당 Python 코드를 실행하여 Response를 보냈습니다. 그런데 해당 Python 코드가 메모리상에 올라가는데에만 시간이 조금 걸렸습니다.

    그것은 Request 요청이 있을 때에만 해당 코드가 실행이 되고, Response 를 작성하고 나면 해당 메모리가 전부다 삭제되었기에 발생하는 일이었습니다.

    이 문제를 해결하기 위해서는 IPC 개념이 필요로 했습니다. Inter Process Communication 에는 Memory를 Sharing 하는 방법도 있지만, C나 Cpp 같은 곳에서 성능을 극한으로 끌어올리기 위해서 사용하는 테크닉입니다. 그렇게도 풀 수 있지만, 일반적인 해법으로는 IPC를 위해서 Socket을 많이 사용한다고 합니다. 그러니까. Server-Client 모델이요.

    문제가 되는 부분을 Server Application 으로. Dameon 상태로 상시 돌아가게끔 해놓으면 될 같습니다.

    예전에 제가 사용했던 코드입니다. 조금 오래된 코드여서 지금에 안맞을 수도 있습니다.

    참고해주시면 감사하겠습니다 .

    from multiprocessing.connection import Listener
    from konlpy.tag import Kkma
    
    from array import array
    
    address = ('localhost', 65123)
    password = b'1234'
    listener = Listener(address, authkey=password)
    
    #initialize
    if __name__ == '__main__':
        kkma = Kkma()
        kkma.nouns('initializing')
        print('main!')
    
    while True:
        conn = listener.accept()
        print('connection accepted from', listener.last_accepted)
        msg = conn.recv()
        sendMessage = kkma.nouns(msg)
        print(sendMessage)
        conn.send(sendMessage)
        conn.close()
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)