josw123 / dart-fss

한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
https://github.com/josw123/dart-fss
MIT License
319 stars 111 forks source link

commit 6e4736 에 버그가 있습니다. #135

Closed sukwoo1414 closed 1 year ago

sukwoo1414 commented 1 year ago

안녕하세요, 좋은 패키지를 만들어주셔서 항상 감사히 사용하고 있습니다. commit 6e4736 에서 아래 부분이 수정되면서버그가 발생한것 같습니다.

commit 6e47367363eddaab4751b545bac5c1c5cb41902a
Author: Sungwoo Jo <nonswing.z@gmail.com>
Date:   Tue Dec 13 17:19:56 2022 +0900

    Fix dependency

    Fake-useragent의 1.0 미만에서 발생하는 문제로 인해 fake-useragent 버전 수정. arelle 버전 업데이트 문제 해결을 위해 arelle-release로 dependency 수정.

....

diff --git a/dart_fss/xbrl/xbrl.py b/dart_fss/xbrl/xbrl.py
index a0878f7..18d4290 100644
--- a/dart_fss/xbrl/xbrl.py
+++ b/dart_fss/xbrl/xbrl.py
@@ -35,7 +35,7 @@ def get_xbrl_from_file(file_path: str) -> DartXbrl:
         arelle_app_dir = os.path.join(os.path.expanduser("~/.config"), "arelle")
         if not os.path.exists(arelle_app_dir):
             os.makedirs(arelle_app_dir)
-    model_xbrl = Cntlr.Cntlr().modelManager.load(file_path)
+    model_xbrl = Cntlr.Cntlr(logFileName='temp.log').modelManager.load(file_path)
     filename = file_path.split('\\')[-1]
     xbrl = DartXbrl(filename, model_xbrl)

Cntlr.Cntlr()을 Cntlr.Cntlr(logFileName='temp.log')로 수정하면서 매번 get_xbrl_from_file()이 호출될 때마다 open된 파일 갯수가 하나씩 증가하고(아마 temp.log를 매번 새로 여는듯) 결국에는 "Too many open files" 에러가 발생합니다.

위 코드를

cntlr =   Cntlr.Cntlr(logFileName='temp.log')

def get_xbrl_from_file(file_path: str) -> DartXbrl:
    .....
    model_xbrl = cntlr.modelManager.load(file_path)

로 수정해봤으나 arelle 패키지의 ModelObject.py의 메모리 사용량이 계속해서 증가하다가 oom으로 뻗어버렸습니다. logFileName='temp.log' 파라미터만 제거하면 xbrl 다운로드가 되지않습니다. 해결해주시면 감사하겠습니다.