Skip to content
Related Articles

Related Articles

Improve Article
Difference between queue.queue vs collections.deque in Python
  • Last Updated : 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 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")

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

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. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course




My Personal Notes arrow_drop_up
Recommended Articles
Page :