Uso del almacenamiento de colas de PythonHow to use Queue storage from Python

Sugerencia

Probar el Explorador de Microsoft Azure StorageTry the Microsoft Azure Storage Explorer

El Explorador de Microsoft Azure Storage es una aplicación independiente y gratuita de Microsoft que permite trabajar visualmente con los datos de Azure Storage en Windows, macOS y Linux.Microsoft Azure Storage Explorer is a free, standalone app from Microsoft that enables you to work visually with Azure Storage data on Windows, macOS, and Linux.

Información generalOverview

Esta guía muestra cómo realizar algunas tareas comunes a través del servicio de almacenamiento en cola de Azure.This guide shows you how to perform common scenarios using the Azure Queue storage service. Los ejemplos están escritos en Python y usan el SDK de Microsoft Azure Storage para Python.The samples are written in Python and use the Microsoft Azure Storage SDK for Python. Entre los escenarios descritos se incluyen insertar, ojear, obtener y eliminar mensajes de la cola, así como crear y eliminar colas.The scenarios covered include inserting, peeking, getting, and deleting queue messages, as well as creating and deleting queues. Para obtener más información acerca de las colas, consulte la sección [Pasos siguientes].For more information on queues, refer to the [Next Steps] section.

¿Qué es Queue Storage?What is Queue Storage?

El almacenamiento en cola de Azure es un servicio para almacenar grandes cantidades de mensajes a los que puede obtenerse acceso desde cualquier lugar del mundo a través de llamadas autenticadas con HTTP o HTTPS.Azure Queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. Un único mensaje en cola puede tener un tamaño de hasta 64 KB y una cola puede contener millones de mensajes, hasta el límite de capacidad total de una cuenta de almacenamiento.A single queue message can be up to 64 KB in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account.

El almacenamiento en cola suele usarse para realizar las siguientes tareas:Common uses of Queue storage include:

  • Creación de trabajo pendiente para el procesamiento asincrónicoCreating a backlog of work to process asynchronously
  • Transferencia de mensajes de un rol web de Azure a un rol de trabajo de AzurePassing messages from an Azure web role to an Azure worker role

Conceptos del servicio ColaQueue Service Concepts

El servicio Cola contiene los siguientes componentes:The Queue service contains the following components:

Cola1

  • Formato de dirección URL: Las colas son direccionables mediante el siguiente formato de dirección URL:URL format: Queues are addressable using the following URL format:
    http://<storage account>.queue.core.windows.net/<queue>http://<storage account>.queue.core.windows.net/<queue>

    La siguiente dirección URL dirige a una cola del diagrama:The following URL addresses a queue in the diagram:

    http://myaccount.queue.core.windows.net/images-to-download

  • Cuenta de almacenamiento: Todo el acceso a Azure Storage se realiza a través de una cuenta de almacenamiento.Storage Account: All access to Azure Storage is done through a storage account. Consulte Objetivos de escalabilidad y rendimiento de Azure Storage para obtener información sobre la capacidad de la cuenta de almacenamiento.See Azure Storage Scalability and Performance Targets for details about storage account capacity.

  • Cola: una cola contiene un conjunto de mensajes.Queue: A queue contains a set of messages. Todos los mensajes deben encontrarse en una cola.All messages must be in a queue. Tenga en cuenta que el nombre de la cola debe ir en minúsculas.Note that the queue name must be all lowercase. Para más información, consulte Asignar nombres a colas y metadatos.For information on naming queues, see Naming Queues and Metadata.

  • Mensaje: un mensaje, en cualquier formato, de hasta 64 KB.Message: A message, in any format, of up to 64 KB. El tiempo máximo que un mensaje puede permanecer en la cola es de 7 días.The maximum time that a message can remain in the queue is 7 days.

Creación de una cuenta de Azure StorageCreate an Azure storage account

La forma más fácil de crear la primera cuenta de Azure Storage es a través de Azure Portal.The easiest way to create your first Azure storage account is by using the Azure portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.To learn more, see Create a storage account.

Puede crear también una cuenta de Azure Storage mediante Azure PowerShell, la CLI de Azure o el proveedor de recursos de Azure Storage para .NET.You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

Si no desea crear una cuenta de almacenamiento en Azure en este momento, también puede utilizar el emulador de Azure Storage para ejecutar y probar el código en un entorno local.If you prefer not to create a storage account in Azure at this time, you can also use the Azure storage emulator to run and test your code in a local environment. Para más información, consulte Uso del emulador de Azure Storage para desarrollo y pruebas.For more information, see Use the Azure Storage Emulator for Development and Testing.

Descarga e instalación del SDK de Azure Storage para PythonDownload and Install Azure Storage SDK for Python

El SDK de Azure Storage para Python requiere Python 2.7, 3.3, 3.4, 3.5 o 3.6.The Azure Storage SDK for Python requires Python 2.7, 3.3, 3.4, 3.5, or 3.6.

Instalación mediante PyPiInstall via PyPi

Para realizar la instalación mediante el índice de paquetes de Python (PyPI), escriba:To install via the Python Package Index (PyPI), type:

pip install azure-storage-queue

Nota

Si va a actualizar desde el SDK de Azure Storage para Python 0.36 o anterior, desinstale el SDK anterior mediante pip uninstall azure-storage antes de instalar el paquete más reciente.If you are upgrading from the Azure Storage SDK for Python version 0.36 or earlier, uninstall the older SDK using pip uninstall azure-storage before installing the latest package.

Si quiere conocer métodos de instalación alternativos, consulte el SDK de Azure Storage para Python.For alternative installation methods, see Azure Storage SDK for Python.

Visualización de la aplicación de ejemploView the sample application

Para ver y ejecutar una aplicación de ejemplo que muestra cómo usar Python con Azure Queues, consulte Azure Storage: Getting Started with Azure Queues in Python (Azure Storage: Introducción a Azure Queues en Python).To view and run a sample application that shows how to use Python with Azure Queues, see Azure Storage: Getting Started with Azure Queues in Python.

Para ejecutar la aplicación de ejemplo, asegúrese de que ha instalado los paquetes azure-storage-queue y azure-storage-common.To run the sample application, make sure you have installed both the azure-storage-queue and azure-storage-common packages.

Instrucciones: Creación de una colaHow To: Create a Queue

El objeto QueueService permite trabajar con colas.The QueueService object lets you work with queues. El siguiente código crea un objeto QueueService .The following code creates a QueueService object. Agregue lo siguiente cerca de la parte superior de todo archivo Python en el que desee obtener acceso a Azure Storage mediante programación:Add the following near the top of any Python file in which you wish to programmatically access Azure Storage:

from azure.storage.queue import QueueService

El código siguiente crea un objeto QueueService utilizando el nombre de la cuenta de almacenamiento y la clave de la cuenta.The following code creates a QueueService object using the storage account name and account key. Reemplace 'myaccount' y 'mykey' por la clave y el nombre de cuenta.Replace 'myaccount' and 'mykey' with your account name and key.

queue_service = QueueService(account_name='myaccount', account_key='mykey')

queue_service.create_queue('taskqueue')

Instrucciones: Inserción de un mensaje en una colaHow To: Insert a Message into a Queue

Para insertar un mensaje en una cola, use el método put_message para crear un nuevo mensaje y agregarlo a la cola.To insert a message into a queue, use the put_message method to create a new message and add it to the queue.

queue_service.put_message('taskqueue', u'Hello World')

Instrucciones: Inspección del siguiente mensajeHow To: Peek at the Next Message

Puede inspeccionar el mensaje situado en la parte delantera de una cola, sin quitarlo de la cola, mediante una llamada al método peek_messages.You can peek at the message in the front of a queue without removing it from the queue by calling the peek_messages method. De forma predeterminada, peek_messages inspecciona un único mensaje.By default, peek_messages peeks at a single message.

messages = queue_service.peek_messages('taskqueue')
for message in messages:
    print(message.content)

Instrucciones: Retirada de mensajes de la colaHow To: Dequeue Messages

El código borra un mensaje de una cola en dos pasos.Your code removes a message from a queue in two steps. Si llama a get_messages, obtiene, de forma predeterminada, el siguiente mensaje en una cola.When you call get_messages, you get the next message in a queue by default. Un mensaje devuelto por get_messages se hace invisible a cualquier otro código de lectura de mensajes de esta cola.A message returned from get_messages becomes invisible to any other code reading messages from this queue. De forma predeterminada, este mensaje permanece invisible durante 30 segundos.By default, this message stays invisible for 30 seconds. Para terminar de quitar el mensaje de la cola, también debe llamar a delete_message.To finish removing the message from the queue, you must also call delete_message. Este proceso de extracción de un mensaje que consta de dos pasos garantiza que si su código no puede procesar un mensaje a causa de un error de hardware o software, otra instancia de su código puede obtener el mismo mensaje e intentarlo de nuevo.This two-step process of removing a message assures that when your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. Su código llama a delete_message justo después de que se haya procesado el mensaje.Your code calls delete_message right after the message has been processed.

messages = queue_service.get_messages('taskqueue')
for message in messages:
    print(message.content)
    queue_service.delete_message('taskqueue', message.id, message.pop_receipt)

Hay dos formas de personalizar la recuperación de mensajes de una cola.There are two ways you can customize message retrieval from a queue. En primer lugar, puede obtener un lote de mensajes (hasta 32).First, you can get a batch of messages (up to 32). En segundo lugar, puede establecer un tiempo de espera de la invisibilidad más largo o más corto para que el código disponga de más o menos tiempo para procesar cada mensaje.Second, you can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message. El siguiente ejemplo de código utiliza el método get_messages para obtener 16 mensajes en una llamada.The following code example uses the get_messages method to get 16 messages in one call. A continuación, procesa cada mensaje con un bucle for.Then it processes each message using a for loop. También establece el tiempo de espera de la invisibilidad en cinco minutos para cada mensaje.It also sets the invisibility timeout to five minutes for each message.

messages = queue_service.get_messages('taskqueue', num_messages=16, visibility_timeout=5*60)
for message in messages:
    print(message.content)
    queue_service.delete_message('taskqueue', message.id, message.pop_receipt)        

Instrucciones: Cambio del contenido de un mensaje en colaHow To: Change the Contents of a Queued Message

Puede cambiar el contenido de un mensaje local en la cola.You can change the contents of a message in-place in the queue. Si el mensaje representa una tarea de trabajo, puede usar esta característica para actualizar el estado de la tarea de trabajo.If the message represents a work task, you could use this feature to update the status of the work task. El código siguiente utiliza el método update_message para actualizar un mensaje.The code below uses the update_message method to update a message. El tiempo de espera de visibilidad se establece en 0, lo que significa que el mensaje aparece inmediatamente y se actualiza el contenido.The visibility timeout is set to 0, meaning the message appears immediately and the content is updated.

messages = queue_service.get_messages('taskqueue')
for message in messages:
    queue_service.update_message('taskqueue', message.id, message.pop_receipt, 0, u'Hello World Again')

Instrucciones: Obtención de la longitud de la colaHow To: Get the Queue Length

Puede obtener una estimación del número de mensajes existentes en una cola.You can get an estimate of the number of messages in a queue. El método get_queue_metadata solicita a Queue service que devuelva los metadatos sobre la cola y approximate_message_count.The get_queue_metadata method asks the queue service to return metadata about the queue, and the approximate_message_count. El resultado solo es aproximado, ya que se pueden agregar o borrar mensajes después de que el servicio de cola haya respondido su solicitud.The result is only approximate because messages can be added or removed after the queue service responds to your request.

metadata = queue_service.get_queue_metadata('taskqueue')
count = metadata.approximate_message_count

Instrucciones: Eliminación de una colaHow To: Delete a Queue

Para eliminar una cola y todos los mensajes contenidos en ella, llame al método delete_queue.To delete a queue and all the messages contained in it, call the delete_queue method.

queue_service.delete_queue('taskqueue')

Pasos siguientesNext Steps

Ahora que está familiarizado con los aspectos básicos del Almacenamiento en cola, siga estos vínculos para obtener más información.Now that you've learned the basics of Queue storage, follow these links to learn more.