Difference between queue.queue vs collections.deque in Python

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

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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")

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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'])

chevron_right


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’])

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.