Los comandos queue.queue y collections.deque dan una idea sobre las colas en general al lector, pero ambos tienen una aplicación muy diferente, por lo que no deben confundirse como uno solo. Aunque son diferentes y se utilizan para propósitos muy diferentes, están vinculados entre sí en términos de funcionalidad completa. Antes de pasar a lo que realmente hacen y cómo están vinculados entre sí, hay un concepto que debe revisarse, los conceptos básicos del procesamiento en el software de computadora.
Sabemos que cualquier programa se convierte en un proceso en estado activo y cada proceso se puede dividir en subprocesos para aprovechar los beneficios de la ventaja que posee. También sabemos que dos subprocesos pueden tener que comunicarse entre sí y aquí es donde queue.queue entra en escena. Collections.deque, por otro lado, se usa como una estructura de datos dentro de un hilo para realizar ciertas funciones. El vínculo entre ellos es que queue.queue usa collections.deque internamente. Ambos tratan con operaciones seguras para subprocesos.
Queue.Queue: esta clase, como se indicó anteriormente, se usa para facilitar la comunicación entre dos subprocesos que se originan en el mismo proceso. Sin embargo, funciona como una cola típica, la única diferencia es el propósito al que sirve. Tiene todas las funciones de multirocessing.queue para hacerlo, junto con dos funciones más: task_done() y join().
- Como sugiere el nombre, task_done() se usa para informar la finalización de la tarea
- Join() se usa para pedir a todas las tareas que esperen hasta que todos los procesos terminen de procesarse.
Python3
# import modules import threading, queue # setting up a queue for threads q = queue.Queue() def execute_thread(): while True: th=q.get() print(f'task {th} started') print(f'task {th} finished') q.task_done() # set up for threads to work threading.Thread(target = execute_thread, daemon = True).start() # sending task requests for i in range(5): q.put(i) print("all tasks sent") # making threads wait until all tasks are done q.join() print("all tasks completed")
Producción:
all tasks sent task 0 started task 0 finished task 1 started task 1 finished task 2 started task 2 finished task 3 started task 3 finished task 4 started task 4 finished all tasks completed
Colecciones.Deque: Una estructura de datos general, que se comporta como una Cola FIFO regular. Esto se emplea dentro de un subproceso para realizar alguna funcionalidad. Su implementación básica se muestra a continuación:
Python3
# import module from collections import deque # initialise dq = deque(['first','second','third']) print(dq) deque(['first', 'second', 'third']) # adding more values dq.append('fourth') dq.appendleft('zeroth') print(dq) deque(['zeroth', 'first', 'second', 'third', 'fourth']) # adding value to a specified index dq.insert(0,'fifth') print(dq) deque(['fifth', 'zeroth', 'first', 'second', 'third', 'fourth']) # removing values dq.pop() 'fourth' print(dq) deque(['fifth', 'zeroth', 'first', 'second', 'third']) dq.remove('zeroth') print(dq) deque(['fifth', 'first', 'second', 'third'])
Producción:
deque([‘primero’, ‘segundo’, ‘tercero’])
deque([‘cero’, ‘primero’, ‘segundo’, ‘tercero’, ‘cuarto’])
deque([‘quinto’, ‘cero’ , ‘primero’, ‘segundo’, ‘tercero’, ‘cuarto’])
deque([‘quinto’, ‘cero’, ‘primero’, ‘segundo’, ‘tercero’])
deque([‘quinto’, ‘ primera segunda tercera’])
Publicación traducida automáticamente
Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA