我可以通過調用modules.get_current_instance_id()
來獲得一個正在運行的進程的短整型instance_id,但是這會返回一個整數索引到當前版本的應用程序的實例列表中。我可以做一個RPC得到充分六角INSTANCE_ID這樣的:如何(在Python中)獲取App Engine實例的長形式instance_id?
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())]
這給我其中包含,除其他事項外的字典,一個'id'
鍵值對,其中值看起來是這樣的:00c61b117cb3c50973d6a73225b3d807eb8e873e96abc59c46ebba168897b8dbd9a443af962df5
這就是我需要的。
這種方法有兩個明顯的缺點。首先是我正在做一個RPC來獲取必須在本地可用的東西 - 某處。第二個是有競爭條件的事實。如果modules.get_current_instance_id()
返回,例如3,但實例#2在該索引指派給該進程和獲得rpc響應之間關閉,我將在rpc_result
的索引中關閉一個。
如何在應用程序引擎中獲取此ID?