| name | azure-storage-queue-py |
| description | Azure Queue Storage SDK for Python. Use for reliable message queuing, task distribution, and asynchronous processing.
Triggers: "queue storage", "QueueServiceClient", "QueueClient", "message queue", "dequeue".
|
| license | MIT |
| metadata | {"author":"Microsoft","version":"1.0.0","package":"azure-storage-queue"} |
Azure Queue Storage SDK for Python
Simple, cost-effective message queuing for asynchronous communication.
Installation
pip install azure-storage-queue azure-identity
Environment Variables
AZURE_STORAGE_ACCOUNT_URL=https://<account>.queue.core.windows.net
AZURE_TOKEN_CREDENTIALS=prod
Authentication & Lifecycle
🔑 Two rules apply to every code sample below:
- Prefer
DefaultAzureCredential. It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
- Local dev:
DefaultAzureCredential works as-is.
- Production: set
AZURE_TOKEN_CREDENTIALS=prod (or AZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials.
- Wrap every client in a context manager so HTTP transports, sockets, and token caches are released deterministically:
- Sync:
with <Client>(...) as client:
- Async:
async with <Client>(...) as client: and async with DefaultAzureCredential() as credential: (from azure.identity.aio)
Snippets may abbreviate this setup, but production code should always follow both rules.
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.storage.queue import QueueServiceClient, QueueClient
credential = DefaultAzureCredential(require_envvar=True)
account_url = "https://<account>.queue.core.windows.net"
with QueueServiceClient(account_url=account_url, credential=credential) as service_client:
...
with QueueClient(account_url=account_url, queue_name="myqueue", credential=credential) as queue_client:
...
Queue Operations
service_client.create_queue("myqueue")
queue_client = service_client.get_queue_client("myqueue")
service_client.delete_queue("myqueue")
for queue in service_client.list_queues():
print(queue.name)
Send Messages
queue_client.send_message("Hello, Queue!")
queue_client.send_message(
content="Delayed message",
visibility_timeout=60,
time_to_live=3600
)
import json
data = {"task": "process", "id": 123}
queue_client.send_message(json.dumps(data))
Receive Messages
messages = queue_client.receive_messages(
messages_per_page=10,
visibility_timeout=30
)
for message in messages:
print(f"ID: {message.id}")
print(f"Content: {message.content}")
print(f"Dequeue count: {message.dequeue_count}")
queue_client.delete_message(message)
Peek Messages
messages = queue_client.peek_messages(max_messages=5)
for message in messages:
print(message.content)
Update Message
messages = queue_client.receive_messages()
for message in messages:
queue_client.update_message(
message,
visibility_timeout=60
)
queue_client.update_message(
message,
content="Updated content",
visibility_timeout=60
)
Delete Message
messages = queue_client.receive_messages()
for message in messages:
try:
queue_client.delete_message(message)
except Exception:
pass
Clear Queue
queue_client.clear_messages()
Queue Properties
properties = queue_client.get_queue_properties()
print(f"Approximate message count: {properties.approximate_message_count}")
queue_client.set_queue_metadata(metadata={"environment": "production"})
properties = queue_client.get_queue_properties()
print(properties.metadata)
Async Client
from azure.storage.queue.aio import QueueServiceClient, QueueClient
from azure.identity.aio import DefaultAzureCredential
async def queue_operations():
credential = DefaultAzureCredential()
async with QueueClient(
account_url="https://<account>.queue.core.windows.net",
queue_name="myqueue",
credential=credential
) as client:
await client.send_message("Async message")
async for message in client.receive_messages():
print(message.content)
await client.delete_message(message)
import asyncio
asyncio.run(queue_operations())
Base64 Encoding
from azure.storage.queue import QueueClient, BinaryBase64EncodePolicy, BinaryBase64DecodePolicy
with QueueClient(
account_url=account_url,
queue_name="myqueue",
credential=credential,
message_encode_policy=BinaryBase64EncodePolicy(),
message_decode_policy=BinaryBase64DecodePolicy()
) as queue_client:
queue_client.send_message(b"Binary content")
Best Practices
- Pick sync OR async and stay consistent. Do not mix
azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.
- Always use context managers for clients and async credentials. Wrap every client in
with Client(...) as client: (sync) or async with Client(...) as client: (async). For async DefaultAzureCredential from azure.identity.aio, also use async with credential: so tokens and transports are cleaned up.
- Use
DefaultAzureCredential for portable auth across local dev and Azure (avoid connection strings / API keys when possible).
- Delete messages after processing to prevent reprocessing
- Set appropriate visibility timeout based on processing time
- Handle
dequeue_count for poison message detection
- Use async client for high-throughput scenarios
- Use
peek_messages for monitoring without affecting queue
- Set
time_to_live to prevent stale messages
- Consider Service Bus for advanced features (sessions, topics)
Reference Files