본문 바로가기

MLOps/Development

쿠팡 상품 정보 수집기(Python, Pyside6)

쿠팡 상품 수집기(Python, Pyside6)

파이썬 GUI라고 검색하니까 대표적으로 Pyside랑 PyQt 프레임워크를 사용한다고 하길래,

Pyside6을 사용했다.

 

Pyside6 선택 이유

가장 큰 선택이유는 PyQT는 GPL 또는 상용 라이선스를 사용하고 Pyside는 LGPL 라이선스를 사용한다는 것이다


여기서 LGPL이란,

Lesser General Public License의 약자로서 자유 소프트웨어 라이센스이다.

결론적으로

LGPL은 상용화에 사용해도 GPL보다는 덜 제약을 받는다길래 사용했다...


실행화면


느낀 점

Qt Designer를 사용했는데, 버튼들 위치 수정 띡띡 하고 ObjectName만 던져주고 사용하는 게 너무 편리하다. 


코드 中

    threads = []

    for thread_idx in range(start_page, start_page + num_pages):
        thread = threading.Thread(target=crawl_page, args=(i,))
        thread.start()
        threads.append(thread)

    for thread in threads:
        thread.join()

 

 

위 코드처럼,  멀티스레드를 사용하긴 했는데, 그다지 적합한 사용은 아니다.

 

왜냐하면

파이썬 스레드는 GIL(Global Interpreter Lock) 때문에 한 번에 하나의 스레드만 실행할 수 있다.

 

근데

크롤링 작업은 브라우저를 제어하고 웹 페이지 DOM(Document Object Model)을 파싱 하여 데이터를 추출하는 작업인데,

이것은 CPU 자원을 많이 사용하는 작업 즉, CPU-bound 작업에 속하기 때문이다.

결론적으로 작업할 것이 많은데 GIL 때문에 병렬처리가 제한적인 멀티스레드보다는 멀티 프로세싱이 더 효율적이다~라는 말을 하고 싶었다.

 

그러나

무조건적으로 적합하지 않다는 건 아니고 Xpath든, selector path 등을 사용해 웹페이지 다운로드와 같은 I-O bound 작업할 때 콜백 기반 비동기처리 같은 것을 적절히 사용해야 한다는 사실이다.