5

Tôi có một bảng trong Google Cloud Datastore, nơi tôi lưu trữ một cấu trúc dữ liệu nhỏ được viết bằng một dịch vụ Python và đọc trong một dịch vụ khác. Tôi đang sử dụng phiên bản gcloud 0.15.0. Đây là mã Python mà tôi sử dụng để viết/đọc dữ liệu đến/từ GCD:Lỗi thời gian chờ của Google Cloud Datastore trong python

from gcloud import datastore 
import datetime 
import json 
class GCD(object): 
def __init__(self, project_id): 
    self.client = datastore.Client(project_id) 

def put(self, table, key, data): 
    with self.client.transaction(): 
     entity = datastore.Entity(self.client.key(table, key), exclude_from_indexes=['context']) 
     entity.update({'context': json.dumps(data), 'created': datetime.datetime.utcnow(), 'done': True}) 
     try: 
      self.client.put(entity) 
     except Exception as e: 
      print "GCD save failed with exception: %s" % e 
    return None 

def get(self, table, key): 
    entity_key = self.client.key(table, key) 
    entity = None 
    try: 
     entity = self.client.get(entity_key) 
    except Exception as e: 
     print "GCD read failed with exception: %s" % e 
    if not entity: 
     return None 
    else: 
     return json.loads(entity['context']) 

Tôi đang quan sát một số lượng lớn các đầu đọc/ghi thất bại với thông điệp "Các hoạt động đọc timed out"; > 5% thất bại hoàn toàn trái ngược với tài liệu đề cập đến tỷ lệ thất bại dự kiến ​​là 1 trong 30K.

Câu hỏi của tôi sau đó là:

  1. Có thể tăng thời gian chờ trong datastore.client.get và datastore.client.put cuộc gọi? Tôi không tìm kiếm câu trả lời dựa trên thử lại; đã cố gắng và không muốn chỉ phụ thuộc vào thử lại.

  2. Có điều gì tôi nên làm khi tạo bảng hoặc thiết lập ứng dụng khách có thể giảm thiểu các lỗi hết thời gian chờ này không?

  3. Tôi đọc ở đâu đó (https://github.com/GoogleCloudPlatform/gcloud-python/issues/1214) rằng gcloud Python sử dụng httplib2.Http không phải là luồng an toàn và có vấn đề thời gian chờ. Có cách nào để sử dụng gói yêu cầu Python (ổn định hơn) không?

Cảm ơn,

+0

Khoảng cách thường xuyên được các cuộc gọi đến đặt() và get()? – Adam

Trả lời

0

Bạn có thể sử dụng requests hoặc urllib3 mà không cần bất kỳ vấn đề, xem https://google-auth.readthedocs.io/en/latest/user-guide.html#making-authenticated-requests

AFAIK yêu cầu thời gian chờ mặc định là None, vì vậy nó chờ đợi vô hạn (cho đến khi server đóng cửa nó.) Bạn cũng có thể chuyển số Session của riêng mình sang số AuthorizedSession cũng ghi đè phương thức request và đặt thời gian chờ mặc định theo ý muốn.

Nếu bạn vẫn gặp vấn đề, sau đó tôi khuyên bạn nên một số cơ chế retry :-) Wath vấn đề https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2694

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