Ami*_*mit 5 python google-cloud-datastore gcloud-python google-app-engine-python google-cloud-python
我在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'])
Run Code Online (Sandbox Code Playgroud)
我正在观察大量的读/写失败,并显示消息"读取操作超时"; > 5%的失败与提到30K中预期失败率为1的文档完全相反.
我的问题是:
是否可以增加datastore.client.get和datastore.client.put调用中的超时?我不是在寻找基于重试的答案; 已经尝试过,不想只依靠重试.
在创建表或设置可以缓解这些超时错误的客户端时,我应该做些什么吗?
我读的地方(https://github.com/GoogleCloudPlatform/gcloud-python/issues/1214)是Python的gcloud使用的httplib2.Http这不是线程安全的,有超时问题.有没有办法使用(更稳定的)Python请求包?
谢谢,
可以使用requests或者urllib3没有任何问题,参见https://google-auth.readthedocs.io/en/latest/user-guide.html#making-authenticated-requests
AFAIK 请求默认超时为 None,因此它会无限等待(直到服务器关闭它)。您可以将自己传递给Session也AuthorizedSession,它会覆盖该request方法并根据需要设置默认超时。
如果您仍然遇到问题,那么我建议使用一些重试机制:-) Wath 这个问题https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2694
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |