2011-12-20 1 views
1
class A(db.Model): 
    d = db.DateTimeProperty(auto_now=True) 

class B(db.Model): 
    c = db.TextProperty() 

def store(): #1 
    db.put_async(A(key_name=x,parent=key) for x in x_list) #x_list: 5000 
    db.put_async(B(c=y,parent=key) for y in y_list) #y_list: 2500*1KB 

def store(): #2 
    db.put_async([A(key_name=x,parent=key) for x in x_list]+ 
       [B(c=y,parent=key) for y in y_list]) 

db.run_in_transaction(store) 

어느 것이 더 적은 메모리를 사용합니까?트랜잭션에서 단일 및 다중 db.put_async() 사이에 메모리 차이가 있습니까?

발전기 또는 별도의 RPC가 차이를 둡니까? 내가 실수하지 않는다면 run_in_transaction()은 기본적으로 puts를 수집 한 다음 어쨌든 즉시 전송합니다.

답변

0

비동기 호출을하고 결과를 산출하지 않으므로 둘 다 아무 것도하지 않습니다. 동기 호출을 사용하는 경우 옵션 1은 이론적으로 메모리를 덜 사용하지만 중요한 경우이 옵션을 테스트해야합니다.

+0

"둘 중 누구도 아무 것도하지 않을 것"이란 무엇을 의미합니까? 트랜잭션은 비동기 puts를 차단합니다. –

+0

@pdknsk 맞을지도 모르지만 명시 적으로 기다려야합니다. 이 경우, 결과를 기다릴 때까지 모든 미해결 RPC를 메모리에 보유해야하기 때문에 메모리를 절약 할 수 없습니다. –

관련 문제