koreainvestment / open-trading-api

Korea Investment & Securities Open API Github https://apiportal.koreainvestment.com
402 stars 115 forks source link

ws_commodity_future.py 실행 시 timeout 발생 이슈 문의. #32

Open KangDaehern opened 8 months ago

KangDaehern commented 8 months ago

=========== Error message =============
Exception has occurred: TimeoutError exception: no description asyncio.exceptions.CancelledError:

During handling of the above exception, another exception occurred:

File "/workspaces/open-trading-api/websocket/python/ws_commodity_future.py", line 188, in connect async with websockets.connect(url, ping_interval=30) as websocket: File "/workspaces/open-trading-api/websocket/python/ws_commodity_future.py", line 269, in asyncio.get_event_loop().run_until_complete(connect()) asyncio.exceptions.TimeoutError:

koreainvestment commented 8 months ago

안녕하세요 KIS Developers Team 입니다.

고객님 정상적인 보안코드(appkey, appsecret)으로 ws_commodity_future.py 코드 실행 결과 정상적으로 작동되고 있는 것을 확인하였습니다.

  1. 네트워크 연결 문제 WebSocket 연결이 네트워크 문제로 인해 완료되지 않을 수 있습니다. 네트워크 연결 상태를 재확인해보시기 바랍니다.

  2. 보안코드(appkey, appsecret) 입력하신 보안코드가 정확한지 확인해보시기 바랍니다. KIS 포털 - 우측 상단의 API 신청 - 휴대폰 인증 후 신청화면에서 보안코드를 재확인하실 수 있습니다.

  3. code_list code_list로 원하는 호출을 [tr_type, tr_id, tr_key] 순서대로 리스트를 만드셨는지 확인해보시기 바랍니다. ex) code_list = [['1','H0CFASP0','175V01'],['1','H0CFCNT0','175V01']]

KangDaehern commented 8 months ago

답변 감사드립니다. 네트워크를 변경해서 재 시도 시 정상 동작하는 것을 확인했습니다. 감사합니다. ^^;

추가 문의 하나만 더 드려도 될까요? ws_commodity_future.py 코드를 원본 그대로 실행 시 (종목, App key 등만 개인것으로 변경 했음) 약 127 번 loop 돌고 난 뒤에 stcuk 상태에서 대기하고 있습니다.

여러 차례 test 시 매 번 거의 비슷한 횟수 (약 127 번) loop 에서 값이 updqte 되지 않고 있습니다.

혹시 요 건 관련해서 조언해 주실만한 사항이 있을까요? ex) api 호출 횟수에 제한이 있다던가..

koreainvestment commented 8 months ago
  1. 네트워크 상태가 초기화 되거나 (화면보호기 장시간 이용시 네트워크 단절될 수 있음) 기존 발급된 웹소켓 접속키(approval_key)가 재 생성 되며 키정보가 정상적이지 않은 정보로 연결될 때 발생할 수 있습니다. 자리를 비우실때 화면보호기 설정 기능 확인 부탁드립니다.

  2. 웹소켓 유량 제한 웹소켓의 경우 1개의 appkey당 체결가+호가 40건 등록 가능하며, 1종목당 체결가+호가 함께 등록하였을 경우 20종목까지 등록가능합니다. 체결통보는 1건(HTS ID) 등록 가능합니다. 유량제한을 확인해보시기 바랍니다.

  3. 버퍼 오버플로우 (Buffer Overflow) 클라이언트에서 수신한 데이터를 적절히 처리하지 못할 경우 버퍼 오버플로우가 발생할 수 있습니다. 이 경우, 클라이언트는 새로운 데이터를 수신할 수 없게 되어 업데이트가 정지될 수 있습니다. 버퍼 오버플로우 관련 해결책은 구글링 부탁드립니다.

KangDaehern commented 8 months ago

답변 감사드립니다.
제 경우 위 이슈는 아래 exception 이 간헐적으로 발생하던 이슈로. except websockets.ConnectionClosed

아래 코드의 ping interval 을 300 -> 1000 정도로 늘려주니 해결되었습니다. async with websockets.connect(url, ping_interval=1000) as websocket: 조언 감사드립니다.