본문 바로가기
무모한 도전-주식 인공지능 만들기

자식 프로세스에 정보를 전달하기 위한 연습-3-

by 인터넷떠돌이 2019. 1. 18.
반응형

안녕하세요?


지난번 포스팅에서 부모 프로세스(parent process)에서 정보를 자식 프로세스(child process)에 전달하는 것 까지는 되는데, 문제는 어떻게 자식 프로세스가 이걸 받아서 활용하는 지에 대해서는 어떻게 하지를 못했습니다. 그래서 이번 포스팅에서 올리게 되는 내용은 이를 극복해 보고자 하는 것 입니다.



구글에서 수 많은 자료를 찾아본 결과, 위 스크린샷처럼 변수 = input()이라는 함수를 이용해서 부모 프로세스에서 보내온 데이터를 받을 수 있다고 합니다.



그리고 이렇게 하는 것으로 실제로 부모 프로세스에서 정의된 문자열이 그대로 자식 프로세스의 결과에 영향을 주는 것을 확인할 수 있었습니다.



그래서 이번에는 아예 다중 데이터-제 경우에는 한두개의 데이터만 부모 프로세스인 pytrader에서 자식 프로세스인 RLTrader로 보내는 것이 아니기 때문에, 일단 이에 대한 실습을 해 보아야 합니다. 그래서 먼저 위 스크린샷과 같이 다양한 데이터를 하나의 집합으로 묶어서 보내려고 했더니.....



위 스크린샷처럼 튜플(tuple)이라는 형태가 되어서 보낼 수 없다고 하는 내용의 에러가 뜨는 것을 볼 수 있었습니다. 이런 점으로 미루어 보아서, 그냥은 무리라는 생각이 듭니다.




다음으로는 다량의 데이터를 입력하는 방법이라는 것으로 위 스크린샷처럼 stdin.write()라는 함수를 이용해서 차례차례 입력을 하며, time.sleep()함수로 0.1초간 잠시 정지를 하라고 명령을 내려 주도록 합니다.



실행결과 모든 데이터가 차례차례 입력이 되어서 한줄로 나오는 것을 확인할 수 있기는 했었습니다. 이걸 그대로 쓰기에는 곤란한 면이 있으니, 이번에는 이걸 분리할 수 있는지 알아보고자 합니다.



이번에는 하나하나 분리할 수 있으리라 생각을 해서, 한번 인덱스를 주어서, 위 스크린샷처럼 [0]을 주어서 한번 This is data라는 것만 나오리라 생각을 했습니다.



그러나 결과는 제 기대와는 다르게, 그냥 T만 짤리는 것만이 나오는 것을 볼 수있었습니다. 이것으로 보아서, 자르기 위해서는 그냥은 안되겠고, split()함수를 사용하는 수 밖에는 없다는 생각이 듭니다.




그래서 먼저 main.py로 가서, 그존에 있던 문자열을 평소라는 쓸일이 없는 문자열인 split&를 중간중간 사용해서 서로 이어주도록 합니다. 그리고 마지막으로 encode()라는 함수를 써서 문자열에서 byte like인 자료형으로 바꾸어서 전송이 가능하도록 만들어 주도록 합니다.



그리고 나서 child.py로 가서, 위 스크린샷과 같은 수준으로 한번 split()함수를 사용해서 각각의 변수들을 자르도록 하고, 그 잘린 변수들 중에서 0번 인덱스를 지니는 자료가 print()함수로 나올 수 있도록 만들어 주도록 합니다.



결과는 제 기대대로 첫번째 데이터만 잘리는 것을 보여주었습니다. 이렇게 하는 것으로 어떻게 자식 프로세스인 파이썬 파일로 보내는 것까지는 성공했습니다. 문제는 이게 py파일에만 국한된 것이라는 겁니다. 제 경우에는 사용환경이 다른-아마 이것도 어떻게 subprocess.Popen()이라는 것으로 설정만 하면 프로젝트인 상태에서 실행이 될 것이라 생각이 됩니다만, 일단 지금은 exe파일로 만들어 놓았기 때문에, 이에 대해서 한번 체크를 해 보아야 겠다는 생각이 듭니다.

반응형