75 lines
1.6 KiB
Python
75 lines
1.6 KiB
Python
|
"""
|
||
|
Queue (cola) es usado como metodo de seguridad en procesos e hilos
|
||
|
para entornos de intercambio de datos. Sigue los principios FIFO.
|
||
|
"""
|
||
|
|
||
|
from threading import Thread, Lock, current_thread
|
||
|
from queue import Queue
|
||
|
import time
|
||
|
|
||
|
def worker(q):
|
||
|
while True:
|
||
|
valor = q.get()
|
||
|
# procesando...
|
||
|
with lock:
|
||
|
print(f'{current_thread().name} tiene valor {valor}')
|
||
|
q.task_done()
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
|
||
|
q = Queue()
|
||
|
|
||
|
# q.put(1)
|
||
|
# q.put(2)
|
||
|
# q.put(3)
|
||
|
|
||
|
# 3 2 1 -->
|
||
|
# first = q.get()
|
||
|
# print(first)
|
||
|
|
||
|
# q.not_empty() # retorna True si la cola esta vacia
|
||
|
# q.task_done() # avisa que esta tarea esta liberada
|
||
|
# q.join() # bloqua el hilo principal hasta q se complete este hilo
|
||
|
|
||
|
lock = Lock()
|
||
|
num_hilos = 10
|
||
|
|
||
|
for i in range(num_hilos):
|
||
|
hilo = Thread(target=worker, args=(q,))
|
||
|
# 'daemon thread' 'demoniza' el hilo.
|
||
|
# Lo termina cuando termina el hilo principal
|
||
|
hilo.daemon=True
|
||
|
hilo.start()
|
||
|
|
||
|
# llenar cola con elementos
|
||
|
for i in range(1, 21):
|
||
|
q.put(i)
|
||
|
|
||
|
q.join()
|
||
|
|
||
|
print('Fin Main')
|
||
|
|
||
|
"""
|
||
|
Thread-1 tiene valor 1
|
||
|
Thread-3 tiene valor 2
|
||
|
Thread-4 tiene valor 3
|
||
|
Thread-5 tiene valor 4
|
||
|
Thread-6 tiene valor 5
|
||
|
Thread-8 tiene valor 6
|
||
|
Thread-7 tiene valor 7
|
||
|
Thread-2 tiene valor 8
|
||
|
Thread-9 tiene valor 9
|
||
|
Thread-10 tiene valor 10
|
||
|
Thread-1 tiene valor 11
|
||
|
Thread-3 tiene valor 12
|
||
|
Thread-4 tiene valor 13
|
||
|
Thread-5 tiene valor 14
|
||
|
Thread-6 tiene valor 15
|
||
|
Thread-8 tiene valor 16
|
||
|
Thread-7 tiene valor 17
|
||
|
Thread-2 tiene valor 18
|
||
|
Thread-9 tiene valor 19
|
||
|
Thread-10 tiene valor 20
|
||
|
Fin Main
|
||
|
"""
|