안녕하세요?
지난번에는 보유하고 있는 주식의 정보를 가지고 오기 위한 메서드를 작성해서 이걸 적용했는데, 제대로 적용이 되지 않는 것을 볼 수 있었습니다. 예기치 않은 무한 순환이 일어났습니다만, 그래도 이걸 어떻게 해서 처리하기 위해서 이번 포스팅에서 이런저런 시도를 하고, 그 결과를 올려 보고자 합니다.
먼저 무엇이 어떻게 된 일인지 알아보기 위해서, 위 스크린샷처럼 일단은 표식을 남기는데, 이 표식이 몇번째 프로세스에서 일어난, 그러니까 몇번째 스레드에서 일어난 에러인지 알아보기 위해서 이런 표시까지 했습니다.
일단 위 스크린샷처럼 제대로 첫번째 스레드에서 처리가 되는 것을 확인할 수 있었습니다. 그리고 전체적인 데이터의 길이도 있는 것으로 나왔습니다.
그런데 두번째 프로세스에 들어서는 어찌된 것인지 데이터를 가져 오지 못하고 계속해서 요청을 무한히 하게 되는 현상이 발생하는 것을 볼 수 있었습니다.
그리고 나서 위 스크린샷에서 볼 수 있는 것처럼 일단 global이라고 해서 전역변수라고 해야 할까요? 아무튼 스레드간에 공유를 할 수 있는 변수를 만들어 주도록 합니다. 그리고 이 변수에다가 처음에 데이터를 얻어오면 여기다가 집어넣고, 이후에 서버에 요청을 해서 제대로 가지고 오지 못했으면, 위 스크린샷처럼 일단 전역변수의 데이터를 가져다가 opw00018의 결과에 넣도록 해 봅니다.
다음으로 해야 할일은 위 스크린샷처럼 제대로 데이터가 공유된 것이 맞는지 알아보기 위해서 한번 이 결과를 스레드마다 출력하도록 합니다.
이렇게 해서 첫번째 스레드에서 제대로 데이터를 얻어온 것이 맞으며, 제대로 표시가 되는 것을 확인할 수 있었습니다. 다만, 멀티 데이터가 필요한데, 멀티 데이터를 지정하지 않은 것은 실수입니다.
그래서 이번에는 제대로 multi를 지정해서 멀티 데이터만 가지고 오도록 만들어 주도록 합니다. 이렇게 하는 것으로 이번에는 제대로 나오리라 생각을 합니다.
그리고 나서 print()함수에서도 표시할 내용은 어디까지나 multi인 것으로 지정을 해서, single의 데이터가 나오는 일이 없도록 만들어 줍니다.
이렇게 하자, 위 스크린샷처럼 제대로 보유하고 있는 종목에 대한 정보를 얻을 수 있었습니다. 잘 생각해 보면, 이 정보는 한번만 요청하고, 나머지는 그냥 공유만 해도 되겠다는 생각이 나중에 들었습니다.
이렇게 해서 마지막으로 5번째 스레드까지 정보를 가지고 오는데 성공했습니다. 정말인지 이렇게 알고리즘 트레이딩을 하기 위한 과정을 하나하나 하는데, 엄청나게 많은 힘이 들기는 합니다. 앞으로 얼마나 많은 메서드가 남아 있는지 생각하면 앞이 캄캄합니다.
'무모한 도전-주식 인공지능 만들기' 카테고리의 다른 글
QThread의 적용 part7 (6) | 2019.07.29 |
---|---|
QThread의 적용 part6 (4) | 2019.07.28 |
QThread의 적용 part4 (0) | 2019.07.28 |
QThread의 적용 part3 (0) | 2019.07.28 |
QThread의 적용 part2 (0) | 2019.07.28 |