2013-09-26 1 views
0

App Engine의 작업 아키텍처와 관련하여 질문이 있습니다.비동기 작업

class MyTask(webapp2.RequestHandler): 
    def post(self): 
     k = ndb.Key(urlsafe=self.request.get('key')) 
     entities = Model.query(ancestor=k).fetch(100) 
     for entity in entities: 
      entity.something = True 
     ndb.put_multi(entities) 

나는 단 하나 개의 프론트 엔드의 인스턴스를 가지고 있고, 이러한 작업의 대부분은 한 번에 실행 :

내가 간단한 작업을 말한다. 그것을 tasklet으로 바꾸는 것이 이치에 맞습니까?

class MyTask(webapp2.RequestHandler): 
    @ndb.synctasklet 
    def post(self): 
     k = ndb.Key(urlsafe=self.request.get('key')) 
     entities = yield Model.query(ancestor=k).fetch_async(100) 
     for entity in entities: 
      entity.something = True 
     yield ndb.put_multi_async(entities) 

잠재적으로 RPC를 수집하여 더 큰 일괄 처리로 보낼 수 있습니까? 또는 단순히 동기식 버전만큼 빠르게 실행되며 각 RPC에서 차단됩니까?

답변

1

NDB는 요청마다 새로운 컨텍스트를 생성하므로 아무런 이점이 없습니다.

세부 사항 : 모두 ndb.toplevelndb.synctasklet는 (RPC 요청을 집계하고 그들을 일괄 처리를 담당 것) 새로운 컨텍스트를 만듭니다. toplevel은 실제로는 synctasklet이지만 사용할 새로운 컨텍스트를 만듭니다.