2013-02-12 27 views
6

các tác vụ NDB và yield là một cách tuyệt vời để làm mã async/song song. Tuy nhiên, nó không phải là khá rõ ràng từ các tài liệu nếu mecanism này có thể được sử dụng một cách an toàn với các chức năng không đồng bộ phi ndb như images.get_serving_url_async().Có an toàn khi sử dụng images.get_serving_url_async() bên trong một nhiệm vụ ndb không?

Các NDB Asynchronous Operation documentation page có một phần rất nhỏ về việc sử dụng phiên bản riêng bối cảnh của NDB của urlfetch_async(), nơi nó được tuyên bố (tôi nhấn mạnh):

URL Fetch dịch vụ có API yêu cầu không đồng bộ riêng của mình. Thật tốt, nhưng không phải lúc nào cũng dễ sử dụng với các tác vụ NDB.

Không rõ ràng vì sao "không phải lúc nào cũng dễ sử dụng với các tác vụ NDB" và điều này khiến tôi tự hỏi liệu câu tương tự có áp dụng cho images.get_serving_url_async() hay không.

Vì vậy, câu hỏi của tôi là: liệu tôi có gặp rắc rối nếu tôi làm điều này?

@ndb.tasklet 
def foo(): 
    url = yield images.get_serving_url_async(image_key) 
+0

Theo yêu cầu tính năng bị từ chối này, có vẻ như tôi chỉ có thể 'yield' đối tượng RPC trả về được trả về bởi' get_serving_url_async() '. http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=151 –

Trả lời

4

Nó là tốt. Năng suất sẽ đợi RPC và cho phép các tasklet khác chạy trong khi chờ đợi. Nhận xét về urlfetch chỉ là về API vụng về của nó.

Các vấn đề liên quan