Productor-consumidor: Sincronización con colas en Python
[crayon-6a61a30d12490336467720/]
Este código hace lo siguiente:
- Importaciones: Importa los módulos necesarios (
threading,queue,time, yrandom). - Cola: Crea una cola
qcon una capacidad máxima de 10 elementos. - Productor: Define la función del productor que produce 20 elementos aleatorios y los coloca en la cola. Después de producir todos los elementos, el productor coloca
Noneen la cola para señalar a los consumidores que ha terminado. - Consumidor: Define la función del consumidor que consume los elementos de la cola. Si el consumidor encuentra
None, sale del bucle y termina. - Hilos: Crea e inicia los hilos para el productor y el consumidor.
- Sincronización: Espera a que ambos hilos terminen utilizando
join.
¿Por qué funciona correctamente?
El uso de la cola (queue.Queue) maneja la sincronización entre el productor y el consumidor de manera automática:
- Bloqueo y Desbloqueo Automático: La cola se encarga de bloquear el productor si la cola está llena y el consumidor si la cola está vacía, gestionando así el flujo de manera segura y evitando que se ejecuten incorrectamente múltiples hilos a la vez.
- Sin Necesidad de Locks Adicionales: No es necesario utilizar locks adicionales (
threading.Lock) porque la cola maneja la sincronización interna.