2017-02-18 47 views
6

我可以通過調用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?

回答

0

你應該可以從INSTANCE_ID環境變量中獲取它。

os.eniron["INSTANCE_ID"] 

你可以得到它

相關問題