Python sürüm 2.1 istemci kitaplıklarını kullanarak kod örnekleri Azure Blob Depolama
Bu makalede, Python için Azure Blob Depolama istemci kitaplığının 2.1 sürümünü kullanan kod örnekleri gösterilmektedir.
31 Mart 2023'te , geçerli Azure SDK yönergelerine uymayan Azure SDK kitaplıkları desteğini kullanımdan kaldırdık. Yeni Azure SDK kitaplıkları, tutarlı deneyimler sağlamak ve güvenlik duruşunuzu güçlendirmek için düzenli olarak güncelleştirilir. Yeni özelliklerden ve kritik güvenlik güncelleştirmelerinden yararlanmak için yeni Azure SDK kitaplıklarına geçmeniz önerilir.
Eski kitaplıklar 31 Mart 2023'ten sonra da kullanılabilse de artık Microsoft'tan resmi destek ve güncelleştirme almayacaktır. Daha fazla bilgi için bkz. destek kullanımdan kaldırma duyurusu.
Blob Depolama ile yüksek oranda kullanılabilir bir uygulama oluşturma
Örnek projeyi indirin ve storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.zip dosyasını ayıklayın (sıkıştırmasını açın). Geliştirme ortamına uygulamanın bir kopyasını indirmek için git de kullanılabilir. Örnek proje temel bir Python uygulaması içerir.
git clone https://github.com/Azure-Samples/storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.git
Örneği yapılandırma
Uygulamada depolama hesabı kimlik bilgilerinizi sağlamanız gerekir. Bu bilgileri uygulamayı çalıştıran yerel makinedeki ortam değişkenlerinde depolayabilirsiniz. Ortam değişkenlerini oluşturmak için İşletim Sisteminize bağlı olarak aşağıdaki örneklerden birini izleyin.
Azure portalında depolama hesabınıza gidin. Depolama hesabınızdaki Ayarlar bölümünde Erişim anahtarları’nı seçin. Depolama hesabı adını ve Anahtar değerlerini aşağıdaki komutlara yapıştırın ve youraccountname> ve <youraccountkey> yer tutucularını değiştirin<. Bu komut ortam değişkenlerini yerel makineye kaydeder. Windows'da ortam değişkeni, kullandığınız Komut İstemi'ni veya kabuğu yeniden yükleyene kadar kullanılamaz.
Linux
export accountname=<youraccountname>
export accountkey=<youraccountkey>
Windows
setx accountname "<youraccountname>"
setx accountkey "<youraccountkey>"
Konsol uygulamasını çalıştırma
Uygulamayı bir terminalde veya komut isteminde çalıştırmak için circuitbreaker.py dizinine gidip python circuitbreaker.py
komutunu girin. Uygulama, çözümdeki HelloWorld.png resmini depolama hesabına yükler. Uygulama, görüntünün ikincil RA-GZRS uç noktasına çoğaltılmış olduğundan emin olmak için denetler. Ardından, resmi 999 kereye kadar indirmeye başlar. Her okuma bir P veya S ile temsil edilir. Burada P birincil uç noktayı, S de ikincil uç noktayı temsil eder.
Örnek kodda, get_blob_to_path yöntemini kullanarak depolama hesabından bir resim indirmek için circuitbreaker.py
dosyasındaki run_circuit_breaker
yöntemi kullanılmaktadır.
Depolama nesnesi yeniden deneme işlevi, doğrusal bir yeniden deneme ilkesine ayarlıdır. Yeniden deneme işlevi, isteklerin yeniden denenip denenmeyeceğini belirler ve isteği yeniden denemeden önce kaç saniye bekleneceğini belirtir. birincile yapılan ilk isteğin başarısız olması durumunda isteğin ikincil olarak yeniden denenmesi gerekiyorsa, retry_to_secondary değerini true olarak ayarlayın. Örnek uygulamada depolama nesnesinin retry_callback
işlevinde özel bir yeniden deneme ilkesi tanımlanmıştır.
İndirmeden önce Service nesnesi retry_callback ve response_callback işlevi tanımlanır. Bu işlevler, indirme işlemi başarıyla tamamlandığında veya indirme işlemi başarısız olup yeniden denendiğinde başlatılan olay işleyicilerini tanımlar.
Kod örneğini anlama
Yeniden deneme olay işleyicisi
retry_callback
olay işleyicisi, resmin indirilmesi işlemi başarısız olmuşsa ve yeniden denenecek şekilde ayarlanmışsa çağrılır. Uygulamada tanımlı yeniden deneme sayısı üst sınırına ulaşılmışsa isteğin LocationMode değeri SECONDARY
olarak değiştirilir. Bu ayar, uygulamayı resmi ikincil uç noktadan indirmeyi denemeye zorlar. Bu yapılandırma, birincil uç nokta süresiz olarak yeniden denenmediğinden görüntüyü istemek için geçen süreyi azaltır.
def retry_callback(retry_context):
global retry_count
retry_count = retry_context.count
sys.stdout.write(
"\nRetrying event because of failure reading the primary. RetryCount= {0}".format(retry_count))
sys.stdout.flush()
# Check if we have more than n-retries in which case switch to secondary
if retry_count >= retry_threshold:
# Check to see if we can fail over to secondary.
if blob_client.location_mode != LocationMode.SECONDARY:
blob_client.location_mode = LocationMode.SECONDARY
retry_count = 0
else:
raise Exception("Both primary and secondary are unreachable. "
"Check your application's network connection.")
İstek tamamlandı olay işleyicisi
response_callback
olay işleyicisi, resmin indirilmesi işlemi başarılı olduğunda çağrılır. Uygulama ikincil uç noktayı kullanıyorsa bu uç noktayı 20 kereye kadar daha kullanmaya devam eder. 20 kereden sonra uygulama LocationMode değerini yeniden PRIMARY
olarak ayarlar ve birincil uç noktayı tekrar dener. Bir istek başarılı olursa uygulama birincil uç noktadan okumaya devam eder.
def response_callback(response):
global secondary_read_count
if blob_client.location_mode == LocationMode.SECONDARY:
# You're reading the secondary. Let it read the secondary [secondaryThreshold] times,
# then switch back to the primary and see if it is available now.
secondary_read_count += 1
if secondary_read_count >= secondary_threshold:
blob_client.location_mode = LocationMode.PRIMARY
secondary_read_count = 0