Author: byun1114

  • multiprocessing

    우선 내가 multiprocessing을 사용하는 것은 여러 이미지 파일에서 동일한 처리를 한 번에 많이 시행하기 위함이다. 우선 이를 위하여 이미지 처리하는 부분을 따로 분리하여 함수로 지정하였다.

    Pool 방법과 Process 방법이 있는데, Pool 방법이 나에게 더 맞는 것 같아서 이 방법으로 해보기로 했다. 그리고 Pool 방법에 map, async_map 등의 방법이 더 있다. 나는 병렬 처리 한 결과를 따로 받아서 처리하지 않기 때문에 코딩하기 쉬운 map 방법으로 선택하였다.

    import multiprocessing
    
    def find1(i):
        ~~~
    
    multiprocessing.Pool(os.cpu_count()).map(find1, files)
    

    os.cpu_count()는 현재 CPU의 코어 숫자를 확인하는 것이다. 메모리가 많이 필요한 분석은 아니기 때문에, 신속한 분석을 위해서 다 사용한다. files는 분석을 할 파일 목록들이다.

    믿을 수 없게 저 간단한 방법으로 동시에 6개 파일을 처리할 수 있다. Python에 대한 xkcd의 유명한 내용인 https://xkcd.com/353/ 이 생각났다.

    단일 코어를 사용하는 기존 방법 분석 때 제대로 확인 안했기는 하지만, 단일 파일 처리할 때와는 달리 core 에서 약 30~40% 정도는 system이 사용한다. 아마 60~70% 성능으로 6개를 분석하는 것이니까 대충 4배 정도의 속도 향상을 기대할 수 있을 것 같다. 하이퍼쓰레딩을 켜고 사용해 봤는데 40~50% 정도 사용에 12개 코어이다. 그런데 체감은 더 느린 것 같다. 그래서 다시 하이퍼쓰레딩을 껐다.

    내가 불필요한 정보를 계속 기억하게 했는지, 시간이 지나면서 메모리가 증가하는 문제가 생겼다. 일단 저 병렬처리 부분이 종료되면 메모리가 다시 원상태로 돌아온다. 그래서 한 번에 분석할 파일 목록을 줄여서 처리하는 방법으로 메모리 누수 문제를 해결했다.

    work_list_number = 400
    for i in range(0, len(files), work_list_number):
        work_list = files[i:i+work_list_number]
        multiprocessing.Pool(os.cpu_count()).map(find1, work_list)

  • sudo 비밀번호 없이 사용하기

    원래 보안을 위한 옵션은 건드리는게 아니지만, 개인적으로만 사용할 리눅스 시스템에 sudo 암호 입력하는건 꽤 귀찮은 일이다.

    /etc/sudoers 파일에 다음과 같은 구문을 입력하면 암호 입력을 생략할 수 있다. 이유는 모르겠으나 파일 가장 하단에 작성해주어야 제대로 동작한다.

    사용자명 ALL=(ALL:ALL) NOPASSWD: ALL
  • killall

    동일한 이름의 프로세스가 여러 개 실행되고 있을 때 이를 모두 종료시킬 때 사용할 수 있다.

    killall -9 프로세스

    이 명령어는 평소에는 사용할 이유가 없는데 Python의 multiprocessing 과정에서 필요해서 찾아보았음.

  • 플라톤의 국가/정체, 박종현 역

    올바름이란 무엇인가에 대하여 이야기를 하고 있는 책.

    철인 정치나 플라톤의 동굴 이야기, 여자와 가족 모두 공동의 것이 되어야 한다는 주장이라던가 하는 플라톤의 유명한 철학 내용이 담긴 책이다. 논리적인 전개를 하는 것 같기는 한데, 그 과정이 상당히 산만하여 뭔가 확 와닿지는 않는다. 이 책의 서문쪽에서 언급된 내용인데 이 책은 나중에 플라톤이 저술한 책이다. 여러 화자가 이야기하는 방식으로 서술되고 있어서 실제 긴 대화 내용을 다 기억하고 있다가 책을 출간한 것처럼 느껴지는데 사실은 그게 아니라 플라톤이 자기의 주장과 근거를 제시하기 위하여 가상의 인물들의 대화 형식으로 저술한 것이다.

    한 번 읽어서 파악하기에는 내가 너무나 미흡한게 아닐까 생각된다.