목록IT/파이썬 (2)
altair의 프로젝트 일기
개요 파이썬으로 나무위키를 크롤링하다가 문제가 발생했다. 서버에서 크롤러가 돌아가는 컨테이너의 메모리 사용량이다. alpine 리눅스를 사용했음에도 불구하고 512메가바이트를 가볍게 채우고 1기가바이트로 바꾸어도 결국 모두 채운다. 크롤러는 대상 서버를 배려하기위해 시간 간격을 두고 요청을 보낸다. 그럼에도 불구하고 메모리에 계속 데이터가 쌓이는 모습이다. 결국 크롤러는 굉장히 느려졌다. 원인 사용 중이었던 크롤러 클래스의 __init__ 코드를 작성하면 다음과 같다. class Crawler: def __init__(self, base_url): self.visited = set() self.queue = Queue() self.base_url = base_url 방문했던 url을 visited라는 s..
운영체제의 가상 메모리 부분을 공부하고 있을 때였다. 운영체제는 디스크와 같은 보조 저장장치 위에 올라간 스왑 메모리에 메인 메모리의 데이터를 저장하곤 한다. 당장 사용하지 않는 데이터가 메인 메모리를 계속 점유하고 있는 것은 비효율적이기도 하거니와 응용 프로그램으로 하여금 컴퓨터에 무한한 메모리가 있는 것처럼 보이게 하는 중요한 기술이다. 그런 측면에서 메인 메모리는 스왑 메모리에 대한 캐시 역할을 한다고 볼 수 있다. 지금 당장 요구하는 데이터를 메인 메모리에 올려 속도를 높이고, 그렇지 않은 데이터를 디스크에 옮겨 공간을 늘리는 방식이니까. CDN이나 프록시 캐시같은 네트워크 캐시부터 CPU안의 캐시까지 세상엔 대단히 많은 캐시들이 있지만 모두 같은 목적을 갖고 있다. 사용자로 하여금 데이터에 더 ..