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?