a
´iè, ã @ sü d Z ddlZddlZddlmZ ddlmZmZ ddlm Z zddl
mZ W n eyb dZY n0 g d¢Z
zddl
mZ W n" eyž G d d
„ d
eƒZY n0 G dd„ deƒZG d
d„ dƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZedu røeZdS )z'A multi-producer, multi-consumer queue.é N)Údeque)ÚheappushÚheappop)Ú monotonic)ÚSimpleQueue)ÚEmptyÚFullÚQueueÚ
PriorityQueueÚ LifoQueuer )r c @ s e Zd ZdZdS )r z4Exception raised by Queue.get(block=0)/get_nowait().N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r r ú/usr/lib64/python3.9/queue.pyr s r c @ s e Zd ZdZdS )r z4Exception raised by Queue.put(block=0)/put_nowait().Nr r r r r r s r c @ s� e Zd ZdZd!dd„Zdd„ Zdd„ Zd d
„ Zdd„ Zd
d„ Z d"dd„Z
d#dd„Zdd„ Zdd„ Z
dd„ Zdd„ Zdd„ Zdd „ ZeejƒZdS )$r zjCreate a queue object with a given maximum size.
If maxsize is <= 0, the queue size is infinite.
r c C sN || _ | |¡ t ¡ | _t | j¡| _t | j¡| _t | j¡| _d| _ d S ©Nr )
ÚmaxsizeÚ_initÚ threadingÚLockÚmutexÚ ConditionÚ not_emptyÚnot_fullÚall_tasks_doneÚunfinished_tasks©Úselfr r r r Ú__init__" s
zQueue.__init__c C s\ | j �B | jd }|dkr4|dk r*tdƒ‚| j ¡ || _W d ƒ n1 sN0 Y dS )a. Indicate that a formerly enqueued task is complete.
Used by Queue consumer threads. For each get() used to fetch a task,
a subsequent call to task_done() tells the queue that the processing
on the task is complete.
If a join() is currently blocking, it will resume when all items
have been processed (meaning that a task_done() call was received
for every item that had been put() into the queue).
Raises a ValueError if called more times than there were items
placed in the queue.
é r z!task_done() called too many timesN)r r Ú
ValueErrorÚ
notify_all)r Ú
unfinishedr r r Ú task_done9 s
zQueue.task_donec C s<