Difference between queue.queue vs collections.deque in Python

22 Oct, 2020
Both queue.queue and collections.deque commands give an idea about queues in general to the reader but, both have a very different application hence shouldn’t be confused as one. Although they are different and used for very different purposes they are in a way linked to each other in terms of complete functionality. Before we jump into what they actually do and how they are linked to each other, there is one concept that has to be revisited, the basics of processing in computer software. 
We know, that any program becomes a process in active state and each process can be broken down to threads to reap the benefits of the advantage this possesses. We also know, that two threads may have to communicate with each other and this is where queue.queue comes into the picture. Collections.deque on the other hand is used as a data structure within a thread to perform certain functionality. The link between them is that queue.queue uses collections.deque internally. Both deal with thread-safe operations.
Queue.Queue: This class as stated above is used to facilitate communication between two threads originating from the same process. It works like a typical queue though, the only difference being the purpose it serves. It has all the functions of multirocessing.queue to do so, along with two more functions- task_done() and join().
As the name suggests, task_done() is used to inform task completion
Join() is used to ask all the tasks to wait until all processes are done processing.
Python3
# import modulesimport threading, queue  # setting up a queue for threadsq = 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 workthreading.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 doneq.join()print("all tasks completed")
Output:
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

Collections.Deque: A general data structure, which behaves like a regular FIFO Queue. This is employed within a thread to get some functionality done. Its basic implementation is shown below:
Python3
# import modulefrom collections import deque  # initialisedq = deque(['first','second','third'])print(dq)deque(['first', 'second', 'third'])  # adding more valuesdq.append('fourth')dq.appendleft('zeroth')print(dq)deque(['zeroth', 'first', 'second', 'third', 'fourth'])  # adding value to a specified indexdq.insert(0,'fifth')print(dq)deque(['fifth', 'zeroth', 'first', 'second', 'third', 'fourth'])  # removing valuesdq.pop()'fourth'print(dq)deque(['fifth', 'zeroth', 'first', 'second', 'third'])dq.remove('zeroth')print(dq)deque(['fifth', 'first', 'second', 'third'])
Output:
deque([‘first’, ‘second’, ‘third’])deque([‘zeroth’, ‘first’, ‘second’, ‘third’, ‘fourth’])deque([‘fifth’, ‘zeroth’, ‘first’, ‘second’, ‘third’, ‘fourth’])deque([‘fifth’, ‘zeroth’, ‘first’, ‘second’, ‘third’])deque([‘fifth’, ‘first’, ‘second’, ‘third’])
Python collections-module
Difference Between
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.