Log/Today

threading 으로 python병렬처리 성공

daco2020 2022. 1. 12. 01:07
반응형

목표

  • 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.CoInitialize() 
        
        # threading을 이용하여 타겟 함수를 준비
        thread = threading.Thread(target=start_subscribe, args=BidAsk)
        
        # 타겟 함수를 실행하려면 start() 매서드를 사용해야함
        thread.start()
        return jsonify("ok"), 200
# Shell Terminal

# count는 1초마다 1씩 추가되는 무힌루프를 설정하였다.
# 무한루프가 작동 중임에도 추가 요청이 정상적으로 작동되는 것을 볼 수 있다.

count : 224
count : 225
count : 226
127.0.0.1 - - [11/Jan/2022 17:24:33] "DELETE /subscribe/A000000 HTTP/1.1" 200 -
127.0.0.1 - - [11/Jan/2022 17:24:33] "DELETE /subscribe/A000000 HTTP/1.1" 400 -
count : 227
count : 228
Subscribe 시작 : A000000
127.0.0.1 - - [11/Jan/2022 17:24:35] "GET /subscribe/A000000 HTTP/1.1" 200 -
127.0.0.1 - - [11/Jan/2022 17:24:35] "GET /subscribe/A000000 HTTP/1.1" 400 -

 

앞으로

  • 자기 확신을 위해 코딩할 때, ‘동작 원리’를 이해하는 것에 초점을 맞출 것
  • ‘된다’, ‘안된다’에 초점을 맞추면 아무것도 모르는 상태로 해매기만 함

 

 


 

레퍼런스

반응형