Azure Blob Storage codevoorbeelden met clientbibliotheken van Python versie 2.1
Dit artikel bevat codevoorbeelden die gebruikmaken van versie 2.1 van de Azure Blob Storage-clientbibliotheek voor Python.
Op 31 maart 2023 is de ondersteuning voor Azure SDK-bibliotheken die niet voldoen aan de huidige Azure SDK-richtlijnen, buiten gebruik gesteld. De nieuwe Azure SDK-bibliotheken worden regelmatig bijgewerkt om consistente ervaringen te stimuleren en uw beveiligingspostuur te verbeteren. U wordt aangeraden over te stappen op de nieuwe Azure SDK-bibliotheken om te profiteren van de nieuwe mogelijkheden en essentiële beveiligingsupdates.
Hoewel de oudere bibliotheken na 31 maart 2023 nog steeds kunnen worden gebruikt, ontvangen ze geen officiële ondersteuning en updates meer van Microsoft. Zie de aankondiging van de buitengebruikstelling van ondersteuning voor meer informatie.
Een maximaal beschikbare app bouwen met Blob Storage
Download het voorbeeldproject en pak (unzip) het bestand storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.zip uit. U kunt ook git gebruiken om een kopie van de toepassing te downloaden naar uw ontwikkelomgeving. Het voorbeeldproject bevat een basis Python-toepassing.
git clone https://github.com/Azure-Samples/storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.git
Voorbeeld configureren
In de toepassing moet u de referenties voor uw opslagaccount opgeven. U kunt deze gegevens opslaan in omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd. Volg afhankelijk van uw besturingssysteem een van de onderstaande voorbeelden voor het maken van de omgevingsvariabelen.
Ga in Azure Portal naar uw opslagaccount. Selecteer bij Instellingen in uw opslagaccount de optie Toegangssleutels. Plak de waarden voor opslagaccountnaam en Sleutel in de volgende opdrachten, waarbij u de <tijdelijke aanduidingen youraccountname> en <youraccountkey> vervangt. Met deze opdracht slaat u de omgevingsvariabelen op de lokale machine op. In Windows is de omgevingsvariabele pas beschikbaar als u de opdrachtprompt of shell die u gebruikt, opnieuw laadt.
Linux
export accountname=<youraccountname>
export accountkey=<youraccountkey>
Windows
setx accountname "<youraccountname>"
setx accountkey "<youraccountkey>"
De consoletoepassing uitvoeren
Als u de toepassing wilt uitvoeren op een terminal of opdrachtprompt, gaat u naar de map circuitbreaker.py en voert u python circuitbreaker.py
in. De toepassing uploadt de afbeelding HelloWorld.png vanuit de oplossing naar het opslagaccount. De toepassing controleert of de afbeelding is gerepliceerd naar het secundaire RA-GZRS-eindpunt. Daarna wordt de afbeelding maximaal 999 keer gedownload. Elke leesbewerking wordt voorgesteld door een P of een S. P staat voor het primaire eindpunt en S voor het secundaire eindpunt.
In de voorbeeldcode wordt de methode run_circuit_breaker
in het bestand circuitbreaker.py
gebruikt om een afbeelding met behulp van de get_blob_to_path-methode te downloaden vanuit het opslagaccount.
De functie Opnieuw van het opslagobject is ingesteld op een lineair beleid voor nieuwe pogingen. De functie Opnieuw bepaalt of een aanvraag opnieuw moet worden geprobeerd en geeft het aantal seconden op dat moet worden gewacht voordat opnieuw wordt geprobeerd de aanvraag uit te voeren. Stel de waarde retry_to_secondary in op true, als de aanvraag opnieuw moet worden geprobeerd naar secundair in het geval de eerste aanvraag naar de primaire mislukt. In de voorbeeldtoepassing is een aangepast beleid voor nieuwe pogingen gedefinieerd in de functie retry_callback
van het opslagobject.
Vóór het downloaden zijn de functies retry_callback en response_callback van het serviceobject gedefinieerd. Deze functies definiëren gebeurtenis-handlers die worden geactiveerd wanneer een download is voltooid of wanneer een download is mislukt en opnieuw wordt uitgevoerd.
Het codevoorbeeld begrijpen
Gebeurtenis-handler opnieuw proberen
De gebeurtenis-handler retry_callback
wordt aangeroepen wanneer het downloaden van de afbeelding is mislukt en is ingesteld op Opnieuw proberen. Als het maximale aantal nieuwe pogingen dat in de toepassing is gedefinieerd, is bereikt, verandert de LocationMode van de aanvraag in SECONDARY
. Deze instelling zorgt ervoor dat de toepassing de afbeelding probeert te downloaden van het secundaire eindpunt. Deze configuratie verkort de tijd die nodig is om de installatiekopieën aan te vragen, omdat het primaire eindpunt niet voor onbepaalde tijd opnieuw wordt geprobeerd.
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.")
Gebeurtenis-handler Aanvraag voltooid
De gebeurtenis-handler response_callback
wordt aangeroepen wanneer het downloaden van de afbeelding is geslaagd. Als de toepassing het secundaire eindpunt gebruikt, blijft de toepassing dit eindpunt maximaal 20 keer gebruiken. Na 20 keer stelt de toepassing de LocationMode weer in op PRIMARY
en wordt het primaire eindpunt weer geprobeerd. Als een aanvraag is geslaagd, blijft de toepassing van het primaire eindpunt lezen.
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