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

한번 더 수행한 데이터 수집기(data harvester)의 개량

by 인터넷떠돌이 2020. 1. 8.
반응형

안녕하세요?

 

이번 포스팅에서는 이제 본격적으로 데이터 수집기를 작동해서 한번 코스피에서 데이터를 수집해 보려고 했습니다만, 문제가 생겨서 또 다른 개량을 한번 더 해야만 했습니다. 이번 개량을 통해서 이제서야 문제가 없는 식으로 작업을 할 수 있는 것으로 보입니다.

이제 시간이 되었습니다. 월요일 오후 3시 30분을 넘어서 드디어 장이 마감되었습니다. 왜 이시간까지 기다렸냐 하면, 장중에서는 데이터가 추가되기 때문에, 모두 같은 데이터가 수집이 된다고 보장을 할 수 없습니다.

먼저 유저 인터페이스에서 한번 10분봉을 목표로 해서, 작업을 시작하도록 합니다. 여기서 까지는 특별한 것은 없습니다만, 문제는 다음에 벌어졌습니다.

중간에 데이터를 더는 수집하지 못하고 데이터 수집기가 멈추어 버린 것 입니다. 이게 한번이면 다시 작동 시키면 되기는 되는데, 문제는 자주 일어난 다는 것 입니다.

일단 처음에는 위 스크린샷처럼 그냥 멈추었는 항목에서 다시 시작을 하라는 식으로 지정을 해서 작업을 하기만 하면 되었습니다.

하지만 자주 이렇게 등록을 하라는 식으로 오류 메세지가 나오면서, 데이터 수집이 아예 멈추어 버리는 현상이 발생한 것 입니다.

 

 

이 문제를 해결하기 위해서 먼저 import를 해서 threading이라고 파이썬 자체에 있는 멀티 스레딩을 지원하는 모듈을 가지고 오도록 합니다.

그리고 다음 작업은 위 스크린샷에서 볼 수 있는 것처럼 일단 2분의 시간을 갖는 타이머를 작동 시키는 것이라고 할 수 있습니다.

그리고 나서 다음으로 해야 할일은 위 스크린샷처럼 강제로 자식 프로세스를 종료시켜야 할 필요성이 있기 때문에, 이 항목에 self.를 붙여 주는 것 입니다.

그리고 나서 시작한 시점을 계산하는 코드가 단 한번만 연산을 수행할 수 있도록 변수를 시작하자 마자 지정을 해 주도록 합니다.

이렇게 해서 primeStarter라는 항목이 일단 자리를 잡으면, 에러가 벌어지더라도 다시 시작 시간을 계산해서 정확한 시작 시점을 모르는 사태는 피할 수 있습니다.

 

그리고 나서 다음으로는 for문을 깰 수 있도록 루프 브레이커라는 변수를 지정해 주도록 하고, 또 있는 것은 savingProcess라고 해서 이 항목을 여기서는 억지로 524로 두었는데, 바로 아까전에 중단이 된 지점부터 다시 시작하라는 의미가 있습니다.

그리고 나서, 이렇게 나오는 항목을 위 스크린샷과 같이 for문을 사용하는 곳에다가 두어서, 증가가 될 때마다 저장을 했다가 다시 이 for루프를 시작할 때 써먹도록 만들어 줍니다.

그리고 자식 프로세스가 강제로 종료가 되었기 때문에, if문을 사용하는 것으로 일단 작업을 다시 이어가도록 만들어 줍니다.

그리고 타이머가 작동하게 되면 나오는 메서드에서 다시 시작을 하라는 식으로 지정을 해 주도록 합니다. 이렇게 하는 것으로 일단 작업이 일단락은 되었습니다.

이렇게 해서 30분봉 차트까직 다 가지고 오는데 2시간 20분이 걸린 것을 확인할 수 있었습니다. 아무튼 이렇게 하는 것으로 이제 작업을 하나 마치기는 했는데, 문제는 이래저래 시간이 많이 걸리기는 걸렸습니다. 이제 남은 작업은 1시간 분봉차트를 코스피(kospi)에서 가지고 오는 것 입니다.

반응형