ndb를 사용하여 애플리케이션 요청마다 일부 데이터를 기록하는 프로파일 링 모델을 작성하고 있습니다. 각 요청은 ndb.put_async에 의해 ndb 요청을 호출하여 데이터를 기록하지만 클라이언트는 결과에 대해 신경 쓰지 않습니다. 본질적으로, 나는 프로파일 링을위한 통계 데이터 저장을 기다리는 애플리케이션 요청을 원하지 않는다.응용 프로그램 요청이 완료된 후 ndb async가 실행되도록 보장됩니까?
그러나 공식 문서의 설명에 대해 혼란 스러웠습니다. ndb 요청이 완료되기 전에 응용 프로그램 요청이 완료되면 ndb 요청은 여전히 끝날 것입니까? 문서는 요청 핸들러가 너무 일찍 존재
경우, 풋이는 무슨 일이 일어날 지 기준에서
을 결코 일어날 수 있음을 나타냅니다? 이것은 결과에 대해 사용자가 신경을 쓰는지에 상관없이 future.get_result가 ndb 요청이 수행되는지 확인하기 위해 호출되어야한다는 의미입니까?
는원래 문서 (https://developers.google.com/appengine/docs/python/ndb/async)는 말한다 :이 예에서
, 그것은 future.get_result 전화 좀 바보 다음 응용 프로그램이 NDB의 결과를 사용하지 않습니다. 그 코드는 바로 거기에있다. 요청 처리기가 NDB를 넣기 전에 종료하지 않도록한다. 이 끝났다; 요청 처리기가 너무 일찍 종료되면 put은 결코 일 수 없습니다. 편의상, 요청 핸들러를 @ ndb.toplevel로 꾸밀 수 있습니다. 이것은 비동기 요청이 끝날 때까지 종료하지 않도록 처리기에 알립니다. 이렇게하면 요청을 보낼 수 있으며 결과는 걱정하지 않아도됩니다.
명확히하기 위해 NDB의 자동 일괄 처리 기능이 구현되지 않을 수있는 이유가 있습니다. put을 나타내는 Future가 자동 배터의 큐에있을 수 있으며, @ ndb.toplevel 데코레이터는 get_result()를 명시 적으로 호출하는 것 외에는 유일하게 확실한 방법이며 이러한 큐에있는 모든 put 요청이 섬기는 사람. –