리눅스를 사용할 경우에는 리눅스 자체의 버전에 따라 설치된 파이썬 역시 32비트, 64비트 버전이 따라간다. 나의 경우 리눅스를 네이티브로 설치한 경우는 (오래된 머신이 아닌 이상에는) 64비트 버전을 사용한다. 그런데 윈도우즈의 경우 windows 10 professional 64비트 버전을 쓰면서도 그동안 예전 XP 시절부터 사용하던 파이썬 2.7 초반대의 32비트 버전을 사용해 왔었다.
오늘 어떤 프로그램을 만들어 돌리는데 (3200x1600 사이즈의 비트맵 파일을 상하로 10타일 연결한 수준의 이미지에 대한 데이터 처리를 거쳐 롤러 가공을 하는 NC 파일을 생성하는 프로그램이다) 무식하게 데이터를 몽땅 다 메모리에서 처리한 다음 파일로 쓰려고 하다 보니 Memory Error 라는 것을 처음으로 보고야 말았다. 프로그램 편의상 사실 전체 이미지에 대한 1차 처리 데이터와, 그와 거의 같은 사이즈의 2차 처리 데이터를 커다란 리스트에 생성하는 것인데 조금 요령을 썼으면 한세트의 리스트면 될 것을 두개를 사용해서인지 메모리 사용량이 많았던 모양이다. 동일한 프로그램을 8타일에 해당하는 것을 했을 때만 해도 에러가 없어서 몰랐던 에러.
일차적으로 두번째 리스트를 통째로 다 만들지 않고 이미지의 한 컬럼단위로 만든 후 파일에 저장, 다시 새 컬럼에 대한 리스트 하나를 만들고 저장하는 식으로 문제를 해결했지만 코드가 지저분해진다.
결국은 기존에 설치했던 파이썬 및 몇몇 라이브러리들 (이라고 해 봐야 numpy, scipy, matplotlib, PIL 정도) 다 제거하고 python 2.7.13 64bit 버전과 이에 맞는 pillow 를 받아서 설치 후 원래의 코드를 돌려보니 잘 돌아간다. 내가 다루는 데이터가 이정도 사이즈가 되는 것도 있구나 하는 것을 처음 느끼는 순간.
안그래도 최근 주식 투자 시뮬레이션 등을 하고 있는데, 조만간 어느 정도 전략이 정해지면 전략에 따라 투자 후보를 필터링하는 프로세스를 만들 생각인데 이때 5000여개의 주식 데이터를 다 메모리에 넣고 뭔가를 해야 할지, 아니면 하나하나 체크 후 결과만을 파일에 모아서 여러 조건에 대한 여러 결과 데이터를 집합연산 등을 통해 후보군을 찾는 방법을 쓸 지 고민중이었다. 이때 전자의 경우 만일 32비트 파이썬을 계속 사용했으면 잘못하면 메모리 에러를 유발할 수도 있었겠구나 하는 생각이 든다.
사용하고 있는 파이썬이 32비트 버전인지 64비트 버전인지 구분하는 팁
import sys
sys.maxsize > 2**32
만일 True 로 나오면 64비트 버전
참고로 sys.maxsize 를 해 보면 64비트 버전일 때 9223372036854775807 이 나온다. 한편 2**63 을 해 보면 9223372036854775808L 이라고 나온다. (우분투 16.10 64비트 버전에서 해 본 경우) 즉, 정수의 경우 부호를 고려해서 63 비트를 실제 값 부분으로 사용하기에 위와 같은 결과가 나오는 듯.
'IT > 소프트웨어' 카테고리의 다른 글
vim column block (0) | 2017.07.13 |
---|---|
윈도우즈 10 process killing on command prompt (0) | 2017.04.08 |
geany key binding & python3 compile (0) | 2017.01.19 |
bug report - web browser (0) | 2017.01.16 |
geany color scheme change (0) | 2016.12.23 |