flask 4

APScheduler를 이용해 비동기 작업을 예약하자

APScheduler 란? APScheduler는 Advanced Python Scheduler의 줄임말로 스케줄을 예약하여 실행할 수 있도록 돕는 라이브러리이다. 예를 들어 특정 시간에 실행시키고 싶은 코드가 있다거나, 일정 간격으로 수행해야 하는 코드가 있다면 이 라이브러리를 유용하게 사용할 수 있다. 특히 기존 스케줄러와 가장 큰 차이점이자 장점은 while과 같은 무한루프를 돌리지 않아도 코드를 비동기적으로 실행시킬 수 있다는 점이다! 실습 아래 실습 코드를 통해 사용법을 살펴보자 from apscheduler.schedulers.background import BackgroundScheduler from flask import Flask #----- #스케줄 실행 코드 def scheduler(..

apscheduler를 활용한 예약 실행 성공

목표 파일에서 DB로 옮기는 코드를 장 마감 시간에 맞춰 자동 실행하기 문제 기존에는 파일의 데이터를 DB로 옮기기 위해서는 클라이언트에서 추가로 요청을 해야 했다. 하지만 정해진 시간에 자동으로 작업을 수행하면 요청을 따로 할 필요도 없고 실수로 누락될 일도 없겠다는 생각이 들었다. 행동 스케줄을 사용하기 위해 구글링을 하다 보니 while로 무한 루프를 하는 코드만 있었다. 하지만 다행스럽게도 apscheduler 라이브러리를 사용하면 while을 돌릴 필요없이 다중 스케줄을 사용할 수 있었다. 그리고 실제 적용해본결과 flask서버와도 함께 사용할 수 있었다. 이로써 서버 시작과 동시에 여러 스케줄들을 자동으로 수행하는 것은 물론, 클라이언트로부터 다른 요청도 받을 수 있었다. # apschedul..

Log/Today 2022.01.18

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