Programming/python(68)
-
동적으로 module import 하기
파이썬에서 정적으로 module을 import를 하려고 하면 아래와 같이 사용하면 된다. import xxxx 그렇다면 동적으로 import는 어떻게 해야 할까?? 여기서는 손쉽게 import 할 수 있도록 importlib를 이용한 방법을 소개한다. 예를 들어 lib폴더에 module.py라는 함수가 있다고 가정하자. module.py def print(): print('module') 아래와 같이 사용함으로써 lib의 module.py package를 가져올 수가 있다. import os import sys sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) import importlib pkg = importlib..
2022.10.01 -
selenium으로 크롤링 하기
로그인 한 후 데이터를 긁어와야 하는 웹 페이지는 어떤 식으로 데이터를 긁어와야 할까?? 이것 저것 찾아보다가 selenium이란 패키지를 발견했다. selenium은 headless (브라우저를 띄우지 않고 브라우저처럼 행동하는 것) chrome을 이용해서 실제 사용자가 액션을 취한 것처럼 동작시키는 작업을 한다. 기본 작업 방법은 다음과 같다. 1. chrome driver 설치 2. crawling 관련 패키지 설치 3. selenium으로 로그인 후 세션 찾기 4. 세션을 python requests 세션에 넣은 후 api 호출하기. 1. 우선 selenium을 사용하기 위해서는 chrom driver를 설치해야 한다. 해당 환경은 mac이라서 brew를 이용해서 아래와 같이 설치했다. $> br..
2022.02.24 -
multi process 구현하기
python을 이용해서 multi process를 구현해 보기로 한다. 코드는 엄청 간단하다. from multiprocessing import Process def start_node(index): print(index) if __name__ == "__main__": num = 1 proc = Process(target=start_node, args=(num,)) proc.start() proc.join() 위의 예제 코드를 활용해서 기존 코드를 multi process로 전환하였지만 아래와 같은 문제가 발생했다. 해당 프로세스를 종료시켰으나, fork시킨 process가 종료되지 않고 좀비 프로세스로 남아있는 문제였다. 이를 방지하기 위해 Process 생성 시 daemon = True argume..
2021.11.19 -
gunicorn 메모리 leak 해결하기.
파이썬에서 가장 간편한 웹 서버로 flask를 주로 이용한다. flask를 이용하다가 조금 규모가 커지거나 로직이 필요한 작업이 생기면, 이때부터 async를 고려하게 되는데, 나 같은 경우에는 gnicorn을 사용함으로써 async 문제를 풀곤 했다. 그런데 gunicorn 사용 후 어느 순간부터 메모리가 차츰 차츰 올라가는 것을 발견했다. '어.. 이거 왜 안떨어지지??' 메모리가 아주 느리지만 조금씩 올라가고 있는 것을 확인해 볼수가 있다. 엄청난 인고의 고통 속에 원인이 gunicorn이란 것을 밝혀냈다. 또한 구글에서 "gunicorn memory leak" 으로 검색해보면 나같이 메모리 릭으로 고생하고 있는 수많은 블로그들을 찾아볼 수가 있다. 원인은 gunicorn에서 생성한 worker 노..
2021.10.06 -
python에서 multi line으로 진행상황 나타내기
2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기 python에서 Progressbar 표현하기 Python script를 실행하는데 이게 돌고 있는건지.. 아니면 멈춘건지 의구심이 들때가 간혹 있다. 언제 끝나는지 궁금하기도 하고... 그래서 python으로 progressbar를 표현할 수 있는게 없나 구글에서 찾아봄. htt.. yujuwon.tistory.com 위의 코드를 활용해서 multi line으로 화면에 진행상황을 출력하려고 했으나, 번번히 실패를 경험하게 된다. 가령 stdout에 '/r', '/n'등을 입력하고 flush를 하게 되면 출력하려고 하는 문장이 1줄로만 나타나거나, newline이 동작하여 아래로 쭉 써지게 된다..
2019.11.24 -
[ELASTIC SEARCH] full scan 하기
elastic의 index table을 full scan 하려고 아래와 같이 코드를 작성해서 호출했다. 처음에 total size를 가져온 후 from의 window size를 옮겨가며 전체 데이터를 가져오는 방식이다. 그런데 위와 같이 작업 할 경우 아래와 같은 에러메시지가 나타나게 된다. Limit of total fields 10000 in index has been exceeded. 해당 index에서의 최대 결과 윈도우는 기본으로 10000으로 설정되어 있으며( index.max_result_window) 해당 값을 넘어갈 시에 위와 같은 메시지가 발생한다. 내가 아무리 from을 13000, size를 100으로 줬다고 하더라도 es 내부에서는 전체 13100개를 가져온 후 0~13000개는 ..
2019.08.08