Log/Today 33

threading 왜 되는 걸까? PumpMessages가 뭐길래?

목표 flask-app 실행 후 Cybos-Subscribe 시작, event 수신 데이터 받아 DB에 저장하기 문제 성공한 줄 알았던 threading이 다시 보니 정상적으로 작동하지 않음 스레드는 나눠진 것 같으나 cybos api의 정보를 정상적으로 받아오지 못하는 상황 cybos api 오류가 뜨거나 flask context app 오류가 뜨거나, 정확한 원인도 파악하지 못하는 상황 행동 일단 리더님께 말씀드리고 피드백에 따라 flask와 분리하여 작게 테스트를 해보기 시작 cybos api 오류의 경우 pythoncom.CoInitialize()로 어떻게든 잡음 서브 스레드의 경우 cybos 인스턴스를 초기화해야하기 때문? >>> 레퍼런스 기존 PumpWaitingMessages 코드를 Pump..

Log/Today 2022.01.13

threading 으로 python병렬처리 성공

목표 flask-app 실행 후 Cybos-Subscribe 시작, event 수신 데이터 받기 문제 Subscribe 프로세스를 계속 유지하지 않으면 실시간 데이터를 받을 수 없음 행동 pump기능을 그대로 적용하여 무한 루프를 돌리고, 대신 스레드를 나누기로 함 파이썬은 단일 스레드이기 때문에 threading 을 사용하여 스레드를 분리함 결과 스레드를 분리하니 event 수신 데이터는 지속적으로 받으면서도 다른 api 요청이 가능해짐 # router.py import threading import BidAsk, start_subscribe @app.route("/") def start(): # 서브 스레드에서 COM 객체를 사용하려면 COM 라이브러리를 초기화 해야함 pythoncom.CoIniti..

Log/Today 2022.01.12

Flask로 Subscribe데이터 받기 실패

목표 앱 실행과 동시에 DB에 저장된 종목코드를 불러와 Subscribe를 해야함 파일 시스템을 활용하여 데이터를 DB에 저장하고 다시 불러오는 api를 만들어야함 - 싱글 및 벌크 기능 필수 문제 flask를 실행하고 종목코드를 불러와 Subscribe까지는 되는 것 같지만 이를 확인 할 수 있는 방법이 없음. 기존에는 pumpwaitmessage(이하 pump)를 무한 루프로 이용하여 프로세스를 지속하였는데, 이 경우에는 다른 요청 작업을 수행할 수 없게 됨. 하지만 pump기능을 사용하지 않으면 print는 물론 DB에도 데이터가 저장되지 않음. Subscribe자체가 비동기 통신 방식이기 때문에 event발생에 따라 데이터를 받아와야 하는데, pump를 사용하지 않으면 어디서 데이터를 캐치할 수 ..

Log/Today 2022.01.10