2017-02-18 32 views
6

modules.get_current_instance_id() numaralı telefonu arayarak çalışan bir işlem için kısa bir tamsayı instance_id alabilirsiniz, ancak bu, uygulamanın geçerli sürümüne ait örneklerin listesine bir tamsayı dizini döndürür. Bu bana başka şeylerin yanı sıra, içeren bir dicti verirApp Engine örneğinde uzun biçimli instance_id dosyasını nasıl alabilirim (Python'da)?

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

, değer şuna benzer bir 'id' anahtar-değer çifti: 00c61b117cb3c50973d6a73225b3d807eb8e873e96abc59c46ebba168897b8dbd9a443af962df5

böyle tam altıgen instance_id almak için bir RPC yapabilir

İhtiyacım olan bu.

Bu yöntemin iki belirgin dezavantajı vardır. Birincisi, bir yerde yerel olarak bulunması gereken bir şey elde etmek için bir RPC yapıyorum. İkincisi, bir yarış durumu olduğu gerçeğidir. modules.get_current_instance_id() döndürürse, 3, ancak örnek # 2, bu işlemin bu dizinin atama arasında kapanır ve rpc yanıtı aldığımda, rpc_result dizinleme içinde bir tarafından kapalı olacağım.

Uygulama motorunda bu kimliğe nasıl ulaşırım?

cevap

0

Bunu INSTANCE_ID ortam değişkeninden elde edebilmelisiniz.

os.eniron["INSTANCE_ID"] 
:

Sen ile alabilirsiniz