2011년 2월 6일 일요일

app engine bulk deletor

이전 글에서는 command라인에서 appcfg.py를 이용한 bulk loader를 봤는데

이건 appengine에서 사용할 수 있는 bulkdeletor입니다.

쓰다 보시면, app engine에서 제공하는 데이터관리기에서는 10개단위로 밖에 지울 수 없기 때문에

대용량으로 데이터를 지우고 하려면 아래와 같이 사용하시면 될 거 같습니다.

아래 코드 참고해 주시면 됩니다.

class Bulkdelete(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        try:
            while True:
                q = db.GqlQuery("SELECT __key__ FROM Model")
                assert q.count()
                db.delete(q.fetch(200))
                time.sleep(0.5)
        except Exception,e:
            self.response.out.write(repr(e)+'\n')
            pass

파이썬으로 Yield사용해서 순환수 만들기 (cyclic)

순환수라는 것은 뭐냐하면 1-2-3-4-5-1-2-3-4-5- ....

이렇게 무한하게 도는 수열입니다.

이것을 왜 보여드리냐 하면, 파이썬의 yield을 사용하면

이 순환수가 아주 심플하게 만들 수가 있습니다

def iter_func:
  i =1
  while True:
    yield i 
    i += 1

이렇게 하면됩니다.

그리고서는 다른 함수에서

iter = iter_func() 로 선언하면 iterator로 선언이 됩니다.

그다음에는 iter.next()로 하나씩 꺼내오면 됩니다.

이게 iterator입니다, 반복자라고도 하는데,

고등학교때 배운 무한수열 이런거라고 생각하시면 쉽습니다.

표준 라이브러리의
itertools.cycle과 헷갈릴수도 있는데 itertools.cycle은 무한 반복수열입니다.

generator는 좀 더 customizing이 가능한 수열이죠..