Megosztás a következőn keresztül:


Blobbérletek létrehozása és kezelése a Pythonnal

Ez a cikk bemutatja, hogyan hozhat létre és kezelhet blobbérleteket a Pythonhoz készült Azure Storage-ügyfélkódtár használatával. Az ügyfélkódtár használatával blobbérleteket szerezhet be, újíthat meg, adhat ki és szakíthat meg.

A blob aszinkron API-k használatával történő bérbeadásáról további információt a blobok aszinkron bérlete című témakörben talál.

Előfeltételek

  • Ez a cikk feltételezi, hogy már van egy projektje, amely a PythonHoz készült Azure Blob Storage ügyfélkódtárral működik együtt. Ha többet szeretne megtudni a projekt beállításáról, beleértve a csomagtelepítést, az utasítások hozzáadását import és egy engedélyezett ügyfélobjektum létrehozását, olvassa el az Azure Blob Storage és a Python használatának első lépéseit.
  • Az engedélyezési mechanizmusnak rendelkeznie kell a blobbérletek használatához szükséges engedélyekkel. További információkért tekintse meg az alábbi REST API-művelet engedélyezési útmutatóját:

Tudnivalók a blobbérletekről

A bérlet létrehoz és kezel egy blob zárolását az írási és törlési műveletekhez. A zárolás időtartama 15–60 másodperc lehet, vagy végtelen is lehet. A blobok bérlete kizárólagos írási és törlési hozzáférést biztosít a blobhoz. Ha aktív bérlettel rendelkező blobba szeretne írni, az ügyfélnek tartalmaznia kell az aktív bérlet azonosítóját az írási kérelemmel.

Ha többet szeretne megtudni a bérletállapotokról, és hogy mikor hajthat végre egy adott műveletet egy bérleten, tekintse meg a bérletállapotokat és a műveleteket.

Minden tárolóművelet engedélyezett egy olyan tárolón, amely aktív bérlettel rendelkező blobokat tartalmaz, beleértve a tároló törlését is. Ezért a tároló akkor is törölhető, ha a benne lévő blobok aktív bérletekkel rendelkeznek. A Tárolóbérlet művelettel szabályozhatja a tároló törléséhez szükséges jogosultságokat.

A bérletműveleteket a BlobLeaseClient osztály kezeli, amely egy olyan ügyfelet biztosít, amely a blobok és tárolók összes bérletműveletét tartalmazza. Ha többet szeretne megtudni a tárolóbérletekről az ügyfélkódtár használatával, olvassa el a Tárolóbérletek létrehozása és kezelése a Pythonnal című témakört.

Bérlet beszerzése

Blobbérlet beszerzésekor egy bérletazonosítót kap, amelyet a kód a blobon való működéshez használhat. Ha a blob már rendelkezik aktív bérletekkel, csak az aktív bérletazonosító használatával kérhet új bérletet. Megadhatja azonban az új bérlet időtartamát.

Bérlet beszerzéséhez hozza létre a BlobLeaseClient osztály egy példányát, majd használja a következő módszert:

A blobok bérletét a BlobClient egy példányának létrehozásával és a következő módszerrel is beszerezheti:

Az alábbi példa egy blob 30 másodperces bérletét szerzi be:

def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
    # Instantiate a BlobClient
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Acquire a 30-second lease on the blob
    lease_client = blob_client.acquire_lease(30)

    return lease_client

Bérlet megújítása

Megújíthat egy blobbérletet, ha a kérelemben megadott bérletazonosító megegyezik a blobhoz társított bérletazonosítóval. A bérlet akkor is megújítható, ha lejárt, feltéve, hogy a blobot a bérlet lejárata óta nem módosították vagy bérletezték újra. Amikor megújít egy bérletet, a bérlet időtartama visszaáll.

A bérlet megújításához használja a következő módszert:

Az alábbi példa megújít egy blob bérletét:

def renew_blob_lease(self, lease_client: BlobLeaseClient):
    # Renew a lease on a blob
    lease_client.renew()

Bérlet felszabadítása

Blobbérletet akkor adhat ki, ha a kérelemben megadott bérletazonosító megegyezik a blobhoz társított bérletazonosítóval. A bérlet felszabadítása lehetővé teszi, hogy egy másik ügyfél közvetlenül a kiadás befejezése után megszerezze a blob bérletét.

A bérletet a következő módszerrel oldhatja fel:

Az alábbi példa egy blob bérletét adja ki:

def release_blob_lease(self, lease_client: BlobLeaseClient):
    # Release a lease on a blob
    lease_client.release()

Bérlet megszakítása

A blobbérleteket megszakíthatja, ha a blob aktív bérletet kapott. Bármely engedélyezett kérelem megszakíthatja a bérletet; a kérelem nem szükséges egyező bérletazonosító megadásához. A bérletek nem újíthatók meg a szerződés megszakadása után, és a bérlet feltörése megakadályozza az új bérlet beszerzését egy ideig, amíg az eredeti bérlet lejár vagy fel nem szabadul.

A bérletet a következő módszerrel szakíthatja meg:

Az alábbi példa megszakítja a blobok bérletét:

def break_blob_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on a blob
    lease_client.break_lease()

Blobok aszinkron bérlete

A Pythonhoz készült Azure Blob Storage ügyfélkódtár aszinkron módon támogatja a blobok bérbeadását. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.

A blob aszinkron API-k használatával történő bérletéhez kövesse az alábbi lépéseket:

  1. Adja hozzá a következő importálási utasításokat:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Kód hozzáadása a program futtatásához a következő használatával asyncio.run: . Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a legfelső szintet BlobServiceClientasync withhozza létre, majd meghívja a blobbérletet beszerző metódust. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.

    async def main():
        sample = BlobSamples()
    
        # 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_blob_lease(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Blobbérlet beszerzéséhez adjon hozzá kódot. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és a await kulcsszót a metódus meghívásakor használja a acquire_lease rendszer.

    async def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
        # Instantiate a BlobClient
        blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
    
        # Acquire a 30-second lease on the blob
        lease_client = await blob_client.acquire_lease(30)
    
        return lease_client
    

Ezzel az alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Bérletállapotok és műveletek

Az alábbi ábra egy bérlet öt állapotát, valamint a bérletállapot-módosításokat okozó parancsokat vagy eseményeket mutatja be.

A diagram showing blob lease states and state change triggers.

Az alábbi táblázat felsorolja az öt bérletállapotot, rövid leírást ad mindegyikről, és felsorolja az adott állapotban engedélyezett bérletműveleteket. Ezek a bérletműveletek állapotváltásokat okoznak, ahogy az a diagramon is látható.

Bérlet állapota Leírás Bérletműveletek engedélyezettek
Elérhető A bérlet feloldva van, és beszerezhető. acquire
Bérelt A bérlet zárolva van. acquire (csak ugyanaz a bérletazonosító), renew, change, releaseés break
Expired A bérlet időtartama lejárt. acquire, renew, releaseés break
Törés A bérlet megszakadt, de a bérlet a megszakítási időszak lejártáig zárolva marad. release és break
Törött A bérlet megszakadt, és a megszakítási időszak lejárt. acquire, releaseés break

Ha egy bérlet lejár, a blobszolgáltatás a bérletazonosítót addig tartja karban, amíg a blobot nem módosítják vagy újra nem bérletelik. Az ügyfél megkísérelheti megújítani vagy felszabadítani a bérletet a lejárt bérletazonosító használatával. Ha ez a művelet sikeres, az ügyfél tudja, hogy a blob nem módosult a bérletazonosító utolsó érvényességétől kezdve. Ha a kérés meghiúsul, az ügyfél tudja, hogy a blob módosult, vagy a blobot ismét bérletbe adták, mivel a bérlet utoljára aktív volt. Az ügyfélnek ezután új bérletet kell szereznie a blobon.

Ha egy bérlet lejár ahelyett, hogy explicit módon fel lett volna szabadítva, előfordulhat, hogy az ügyfélnek akár egy percet is várnia kell, mielőtt új bérletet szerezhet be a blob számára. Az ügyfél azonban azonnal megújíthatja a bérletet a bérletazonosítójával, ha a blobot nem módosították.

A blobok pillanatképeihez nem adható bérlet, mivel a pillanatképek írásvédettek. Ha bérletet kér egy pillanatképhez, az állapotkódot 400 (Bad Request)eredményez.

Források

Ha többet szeretne megtudni a blobbérletek Pythonhoz készült Azure Blob Storage-ügyfélkódtár használatával történő kezeléséről, tekintse meg az alábbi erőforrásokat.

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A blobbérletek kezelésére szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:

Code samples

Ügyfélkódtár erőforrásai

Kapcsolódó információk