2017-02-18 5 views
6

Я могу получить короткое целое число экземпляра 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.

Как я могу получить этот идентификатор в движке приложения?

ответ

0

Вы должны иметь возможность получить его из переменной среды INSTANCE_ID.

Вы можете получить его с:

os.eniron["INSTANCE_ID"] 
Смежные вопросы