我在 Google Cloud Datastore 中有一个表,我在其中存储了一个小型数据结构,该结构用一个 Python 服务编写并在另一个 Python 服务中读取。我正在使用 gcloud 版本 0.15.0。这是我用来向 GCD 写入/读取数据的 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'])
我观察到大量读/写失败,并显示“读操作超时”消息;> 5% 的失败,这与文档中提到的预期失败率为 1 in 30K 完全相反。
那么我的问题是:
是否可以增加 datastore.client.get 和 datastore.client.put 调用的超时时间?我不是根据重试来寻找答案;已经尝试过,不想仅仅依赖重试。
在创建表或设置客户端时我应该做些什么来减轻这些超时错误?
我在某处(https://github.com/GoogleCloudPlatform/gcloud-python/issues/1214)读到 Python gcloud 使用 httplib2.Http ,它不是线程安全的并且存在超时问题。有没有办法使用(更稳定的)Python requests 包?
谢谢,