2017-02-18 4 views
6

Ich kann eine kurze Ganzzahl instance_id für einen laufenden Prozess abrufen, indem Sie modules.get_current_instance_id() aufrufen, aber dies gibt einen Ganzzahl-Index in die Liste der Instanzen für die aktuelle Version der Anwendung zurück. Ich kann einen rpc die vollen hex instance_id wie folgt zu erhalten:Wie (in Python) bekomme ich die Langform-Instanz-ID für eine App Engine-Instanz?

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())] 

Das gibt mir eine dict, die unter anderem beinhaltet, ein 'id' Schlüssel-Wert-Paar, wo der Wert etwas wie folgt aussieht: 00c61b117cb3c50973d6a73225b3d807eb8e873e96abc59c46ebba168897b8dbd9a443af962df5

Das ist was ich brauche.

Es gibt zwei offensichtliche Nachteile dieser Methode. Die erste ist, dass ich einen RPC mache, um etwas zu bekommen, das lokal verfügbar sein muss - irgendwo. Die zweite ist die Tatsache, dass es eine Wettlaufbedingung gibt. Wenn modules.get_current_instance_id() zurückkehrt, sagen wir, eine 3, aber Instanz # 2 schaltet zwischen der Zuweisung dieses Index zu diesem Prozess und wenn ich die RPC-Antwort bekomme, werde ich durch eine in meiner Indizierung der rpc_result deaktiviert werden.

Wie bekomme ich diese ID in App Engine?

Antwort

0

Sie sollten es von der Umgebungsvariablen INSTANCE_ID abrufen können.

Sie können es mit bekommen:

os.eniron["INSTANCE_ID"] 
Verwandte Themen