Thursday, July 15, 2021

Python Queue

queue — A synchronized queue class


The queue module implements multi-producer, multi-consumer queues. It is especially useful in threaded programming when information must be exchanged safely between multiple threads. The Queue class in this module implements all the required locking semantics.


The module implements three types of queue, which differ only in the order in which the entries are retrieved. In a FIFO queue, the first tasks added are the first retrieved. In a LIFO queue, the most recently added entry is the first retrieved (operating like a stack). With a priority queue, the entries are kept sorted (using the heapq module) and the lowest valued entry is retrieved first.



Internally, those three types of queues use locks to temporarily block competing threads; however, they are not designed to handle reentrancy within a thread.


In addition, the module implements a “simple” FIFO queue type, SimpleQueue, whose specific implementation provides additional guarantees in exchange for the smaller functionality.


An example usage would be like below 


import threading, queue


q = queue.Queue()


def worker():

    while True:

        item = q.get()

        print(f'Working on {item}')

        print(f'Finished {item}')

        q.task_done()


# turn-on the worker thread

threading.Thread(target=worker, daemon=True).start()


# send thirty task requests to the worker

for item in range(30):

    q.put(item)

print('All task requests sent\n', end='')


# block until all tasks are done

q.join()

print('All work completed')



References:

No comments:

Post a Comment