Dela via


Skapa och hantera containerlån med Python

Den här artikeln visar hur du skapar och hanterar containerlån med hjälp av Azure Storage-klientbiblioteket för Python. Du kan använda klientbiblioteket för att hämta, förnya, frigöra och bryta containerlån.

Mer information om hur du hyr en blobcontainer med asynkrona API:er finns i Låna containrar asynkront.

Förutsättningar

  • Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för Python. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg import av instruktioner och skapande av ett auktoriserat klientobjekt finns i Komma igång med Azure Blob Storage och Python.
  • Auktoriseringsmekanismen måste ha behörighet att arbeta med ett containerlån. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärd:

Om containerlån

Ett lån upprättar och hanterar ett lås på en container för borttagningsåtgärder. Låsvaraktigheten kan vara mellan 15 och 60 sekunder, eller så kan den vara oändlig. Ett lån på en container ger exklusiv borttagningsåtkomst till containern. Ett containerlån styr bara möjligheten att ta bort containern med hjälp av REST API-åtgärden Ta bort container . Om du vill ta bort en container med ett aktivt lån måste en klient inkludera det aktiva låne-ID:t med borttagningsbegäran. Alla andra containeråtgärder lyckas på en hyrd container utan låne-ID. Om du har aktiverat mjuk borttagning av containrar kan du återställa borttagna containrar.

Mer information om lånetillstånd och när du kan utföra en viss åtgärd på ett lån finns i Lånetillstånd och åtgärder.

Låneåtgärder hanteras av klassen BlobLeaseClient , som tillhandahåller en klient som innehåller alla låneåtgärder för blobar och containrar. Mer information om bloblån med hjälp av klientbiblioteket finns i Skapa och hantera bloblån med Python.

Skaffa ett lån

När du skaffar ett containerlån får du ett låne-ID som koden kan använda för att arbeta med containern. Om containern redan har ett aktivt lån kan du bara begära ett nytt lån med hjälp av det aktiva låne-ID:t. Du kan dock ange en ny lånetid.

Om du vill skaffa ett lån skapar du en instans av klassen BlobLeaseClient och använder sedan följande metod:

Du kan också skaffa ett lån med hjälp av följande metod från klassen ContainerClient :

I följande exempel hämtas ett lån på 30 sekunder för en container:

def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name):
    # Instantiate a ContainerClient
    container_client = blob_service_client.get_container_client(container=container_name)

    # Acquire a 30-second lease on the container
    lease_client = container_client.acquire_lease(30)

    return lease_client

Förnya ett lån

Du kan förnya ett containerlån om låne-ID:t som anges i begäran matchar det låne-ID som är associerat med containern. Lånet kan förnyas även om det har upphört att gälla, så länge containern inte har hyrts igen sedan lånet upphörde. När du förnyar ett lån återställs lånets varaktighet.

Använd följande metod för att förnya ett lån:

I följande exempel förnyas ett lån för en container:

def renew_container_lease(self, lease_client: BlobLeaseClient):
    # Renew a lease on the container
    lease_client.renew()

Frigöra ett lån

Du kan frigöra ett containerlån om låne-ID:t som anges i begäran matchar låne-ID:t som är associerat med containern. Om du släpper ett lån kan en annan klient skaffa ett lån för containern omedelbart efter att versionen har slutförts.

Du kan frigöra ett lån med hjälp av följande metod:

I följande exempel släpps lånet för en container:

def release_container_lease(self, lease_client: BlobLeaseClient):
    # Release a lease on the container
    lease_client.release()

Bryta ett lån

Du kan bryta ett containerlån om containern har ett aktivt lån. Alla auktoriserade begäranden kan bryta lånet. begäran krävs inte för att ange ett matchande låne-ID. Ett lån kan inte förnyas efter att det har brutits, och om du bryter ett lån förhindras ett nytt lån från att förvärvas under en tidsperiod tills det ursprungliga lånet upphör att gälla eller frisläpps.

Du kan bryta ett lån med hjälp av följande metod:

I följande exempel bryts lånet för en container:

def break_container_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on the container
    lease_client.break_lease()

Låna containrar asynkront

Azure Blob Storage-klientbiblioteket för Python stöder asynkront leasing av containrar. Mer information om krav för projektkonfiguration finns i Asynkron programmering.

Följ dessa steg för att låna ut en container med asynkrona API:er:

  1. Lägg till följande importinstruktioner:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Lägg till kod för att köra programmet med .asyncio.run Den här funktionen kör den skickade coroutinen main() i vårt exempel och hanterar händelseloopen asyncio . Coroutines deklareras med syntaxen async/await. I det här exemplet main() skapar coroutine först den översta nivån BlobServiceClient med och async withanropar sedan metoden som hämtar containerlånet. Observera att endast klienten på den översta nivån behöver använda async with, eftersom andra klienter som skapats från den delar samma anslutningspool.

    async def main():
        sample = ContainerSamples()
    
        # TODO: Replace <storage-account-name> with your actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            lease_client = await sample.acquire_container_lease(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Lägg till kod för att hämta ett containerlån. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet async och nyckelordet await används när metoden anropas acquire .

    async def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name):
        # Instantiate a ContainerClient
        container_client = blob_service_client.get_container_client(container=container_name)
    
        # Acquire a 30-second lease on the container
        lease_client = BlobLeaseClient(container_client)
        await lease_client.acquire(lease_duration=30)
    
        return lease_client
    

Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.

Lånetillstånd och åtgärder

Följande diagram visar de fem tillstånden för ett lån och de kommandon eller händelser som orsakar ändringar i lånetillståndet.

A diagram showing container lease states and state change triggers.

I följande tabell visas de fem lånetillstånden, en kort beskrivning av var och en och en av de låneåtgärder som tillåts i ett visst tillstånd. Dessa låneåtgärder orsakar tillståndsövergångar, som visas i diagrammet.

Lånetillstånd beskrivning Låneåtgärder tillåts
Tillgängligt Lånet är olåst och kan förvärvas. acquire
Leasade Lånet är låst. acquire (endast samma låne-ID), renew, change, releaseoch break
Upphört Lånetiden har upphört att gälla. acquire, renew, releaseoch break
Bryta Lånet har brutits, men lånet fortsätter att vara låst tills brytperioden har upphört att gälla. release och break
Bruten Lånet har brutits och brytperioden har upphört att gälla. acquire, release, och break

När ett lån upphör att gälla underhålls låne-ID:t av Blob-tjänsten tills containern ändras eller leasas igen. En klient kan försöka förnya eller frigöra lånet med det utgångna låne-ID:t. Om begäran misslyckas vet klienten att containern hyrdes igen eller att containern togs bort sedan lånet senast var aktivt.

Om ett lån upphör att gälla i stället för att uttryckligen frisläppas kan en klient behöva vänta upp till en minut innan ett nytt lån kan förvärvas för containern. Klienten kan dock förnya lånet med det utgångna låne-ID:t omedelbart.

Resurser

Mer information om hur du hyr en container med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

REST API-åtgärder

Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att hyra en container använder följande REST API-åtgärd:

Kodexempel

Klientbiblioteksresurser

Se även