Apéndice B. Material complementario

Este apéndice contiene código adicional relacionado con los casos prácticos presentados en el libro. Este material puede resultarte útil para completar tu comprensión de los ejemplos.

Ejemplo de cubiertos con Asyncio

"Caso práctico: Robots y cubiertos" analizó un fallo de condición de carrera causado por múltiples hilos que modificaban los registros de cubiertos en la instancia global del objeto "cocina". Para completar, he aquí cómo podríamos crear una versión asíncrona de la solución.

Hay un punto concreto que quiero destacar sobre laobservabilidad de la concurrencia en el enfoque asyncio, que se muestra en el Ejemplo B-1.

Ejemplo B-1. Gestión de cubiertos mediante asyncio
import asyncio

class CoroBot():  1
  def __init__(self):
    self.cutlery = Cutlery(knives=0, forks=0)
    self.tasks = asyncio.Queue()  2

  async def manage_table(self):
    while True:
      task = await self.tasks.get()  3
      if task == 'prepare table':
        kitchen.give(to=self.cutlery, knives=4, forks=4)
      elif task == 'clear table':
        self.cutlery.give(to=kitchen, knives=4, forks=4)
      elif task == 'shutdown':
        return

from attr import attrs, attrib

@attrs
class Cutlery:
    knives = attrib(default

Get Utilizar Asyncio en Python now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.