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
(
)
:
def
__init__
(
self
)
:
self
.
cutlery
=
Cutlery
(
knives
=
0
,
forks
=
0
)
self
.
tasks
=
asyncio
.
Queue
(
)
async
def
manage_table
(
self
)
:
while
True
:
task
=
await
self
.
tasks
.
get
(
)
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.