Я могу получить короткое целое число экземпляра instance_id для запущенного процесса, вызвав modules.get_current_instance_id()
, но это возвращает индекс integer в список экземпляров для текущей версии приложения. Я могу сделать RPC, чтобы получить полный шестигранную instance_id так:Как (на Python) получить экземпляр экземпляра long-form для экземпляра App Engine?
from google.appengine.api.app_identity import app_identity
from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = build('appengine', 'v1', credentials=credentials)
appsId = app_identity.get_application_id()
rpc_result = service.apps().services().versions().instances().list(versionsId='23', servicesId='default', appsId=appsId).execute()
print rpc_result['instances'][int(modules.get_current_instance_id())]
Это дает мне Dict, который содержит, среди прочего, 'id'
ключ-значение пары, где значение выглядит примерно так: 00c61b117cb3c50973d6a73225b3d807eb8e873e96abc59c46ebba168897b8dbd9a443af962df5
Это то, что мне нужно.
Существует два очевидных недостатка этого метода. Во-первых, я делаю RPC, чтобы получить то, что должно быть локально доступно - где-то. Во-вторых, это состояние гонки. Если modules.get_current_instance_id()
возвращает, скажем, 3, но экземпляр # 2 отключается между назначением этого индекса этому процессу, и когда я получаю ответ rpc, я буду отключен одним из моих индексирования rpc_result
.
Как я могу получить этот идентификатор в движке приложения?