두 코드의 차이

lines = “”
for line in open(“max.txt”, “r”).readlines():
    lines += line

와..

lines = []
for line in open(“max.txt”, “r”).readlines():
    lines.append(line)
lines = “”.join(lines)

이거….

둘다 Python 코드인데 매우(?) 큰 파일을 읽을때 속도 차이가 날까?

자바의 String 객체에서 “+”로 스트링을 append 시킬때 StringBuffer의 “append” 메서드를 쓰라고 퍼포먼스 팁에 나와있다.
물론 자바에서 String은 불변 객체이다.
만일
String abs = abs + “감자”;
라는 코드를 칠경우 결과로 나오는 abs 객체는 우측 식에 있는 abs와 동일한 메모리 주소를 가지지 않는다.좌변의 abs는 새로 생겨난 객체이기 때문이다.
물론 우변의 abs는 가바지 컬렉션이 언젠가는(?) 되겠지만 한동안 아니면 한순간이라도 메모리에 상주하고 있기 때문에 리소스를 잡아 먹게된다.
그래서 많은 append가 일어나는 문자열인 경우 StringBuffer를 쓰라고 추천하는것이다.

파이썬에서도 마찬가지일것으로 추측(?) 한다.
파이썬에서도 string 객체는 튜플객체와 함께 불변 시퀀스 타입니다.
string을 과도하게 뒤 붙이기 하는 로직은 코딩상의 편안함이 있을지언정 쓰다만 string 객체가 GC 되기 전까지 리소스를 잡아먹게 되는것이다.
크기가 작은 데이타일경우는 별 상관 없겠지만 큰 데이타일경우 좀 무리수가 따르겠다.

그래서 아래 코드처럼 리스트 객체로 append 시킨다음에 string 으로 변환하기 위해 join을 하면 된다.

휴~~~ 자바를 쬐금 해봐서 그런지 파이썬에서 string을 계속 append 시키는 모듈을 만들었을때 좀 찜찜했는데 저래 하면 되겠군…

근데 문제는 위와같은 파이썬에 대한 내용이 순전히 내 추측에 의존한다는 것이다..ㅋㅋㅋ
물론 충분히 설득력이 있기는 하지만 검증된게 아니기땜시 내일 당장 테스트를 해보고 결과를 올려 놓아야 겠다.

저게 맞다는 판명이 된다면 이번 기회에 아예 파이썬용 StringBuffer 클래스를 만들어 볼까도 생각한다.

[#M_ 클릭! 테스트 결과 | 글 닫기 |
테스트는 HTML 문서에서 TEXT만 뽑아와 새로운 TEXT 문서를 만들어 주는 모듈에서 했다.
물론 같은 HTML문서에서이다.

HTML에서 텍스트를 뽑아와 “+”로 append를 했을경우
아래와 같다.
12개의 링크에 대해서 12번의 모듈 속도 테스트…

하지만 list객체로 apped를 하고 string으로 변환을 시켰을 경우
가변 폭이 좁았고.
대체적인 속도는 아래 캡쳐와 같다.
이거 역시 12개의 링크 테스트

시간이 더 있으면 굉장히 큰 파일도 하고 싶었는데 테스트 느낌(?)상 아래 코드가 빠르다는 잠정적인 결과다.

아마도 큰 파일로 작업을 할경우 시간 차이는 기하급수적으로 늘어날것임이 분명하다._M#]

Google 프레임웍 Archtecture

“모방은 창조의 어머니”

내가 관여하는 부분은 그림의 위쪽단인데.. …

시간을 많이 잡아먹는 Sorting 문제와 중복문서 비교 문제

그리고 입출력 퍼포먼스 향상..이 가장 관건이다.

정말 골치 아프다.

The Anatomy of a Large-Scale Hypertextual Web Search Engine라는 문서에 구글 프레임웍을 어느정도 소개해줬는데. 그 문서 글을 인용해 보자면…

….Each crawler keeps roughly 300 connections open at once. This is necessary to retrieve web pages at a fast enough pace. At peak speeds, the system can crawl over 100 web pages per second using four crawlers……

웹 로봇 대당 300개의 동시 접속…
가장 속도가 빠를땐 4개의 웹 로봇이 초당 100개의 문서를 다운 받는다니.
프로그램의 퍼포먼스는 둘째치고 Archtecture가 얼마나 탄탄하길래..그 속도가 나오는지 정말 대단하다..탄탄한 distributed crawling system을 가지고 있기에 가능한 일이라 본다..
물론 네트웍 속도도 최고겠지만..

창조라는 개발툴을 아시나요?

창조 유저 그룹을 가끔 방문하곤 한다.

창조 매니아 분들은 창조를 초월한 상태여서 글들도 볼만하고 글을 읽어보면 재미있다. 다들 실력들도 출중한거 같고 창조뿐만 아니라 다른 언어에 대해서도 조예가 깊어 보이더라..

내가 창조를 처음 접한게 98년도 였던가…???

VB를 처음 공부하고 나서 우연하게…
VB처럼 프로그래밍 하는데 명령어가 한글인 언어(?)를 쓰는 개발툴을 발견한 것이다.

프로그램 개발에 한창 열을 올리던 터라 아주 재미있게 사용하던 기억이 난다.

이걸로 교양과목 프로그램으로 레포트 제출하고 A 받았었고…(비만도 측정 프로그램)

개인적으로는 그 옛날(98년도) ATX 보드 쓰는 피씨를 알바해서 사다놓고 그당시 자동종료 프로그램이 없었던지라 자동종료 프로그램을 만들어 타이머 맞춰놓고 winamp로 음악틀어놓고 항상 잠을 잤던 기억이 난다.

2002년까지 쓴걸로 기억이 나는데 부대 행정실에 창조 깔아놓고 일직근무 설때마다 조금씩 코딩해서 지뢰지대 산출 프로그램을 만들어서 개인적으로는 물론 부대측면에서도 아주 이익(?)이 많이 되었던 적도 있었다.

이 프로그램 때문에 지뢰지대 계산하는 법을 잊어버렸을 정도였고…
타 부대 동기들도 프로그램 복사해 달라 난리였었으니 인기는 짐작이 갈것이다.
특히 레포팅 기능이 출중했지…ㅋㅋㅋ

그당시 부대에서 불법 프로그램 단속도 자주 떳지만 무엇보다고 부대 컴퓨터가 후진지라 VB나 Delphi같은 개발툴을 깔을수조차 없었고 사용하기도 버거워서 더더욱 이걸 썼는지 모르겠다.

계속 버전업이 되었으면 좋겠다는 생각이 드는데… 만드신 분이 소스를 잃어버렸다는 소문도 있고 아예 프로그래밍을 접고 게임방을 하신다는 소문도 들린다.

조금 아쉽긴하다..
그 옛날(?) “씨앗” 이라는 한글 프로그램 언어도 있었는데…