File: //home/arjun/projects/env/lib/python3.10/site-packages/kombu/__pycache__/resource.cpython-310.pyc
o
'we7 � @ s� d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddl
mZ dd lm
Z
dd
lmZ ddlmZ er>ddlmZ d
d� ZG dd� de �ZG dd� d�ZdS )z%Generic resource pool implementation.� )�annotationsN)�deque)�Empty)� LifoQueue)�
TYPE_CHECKING� )�
exceptions)�register_after_fork)�lazy)�
TracebackTypec C s$ z| � � W d S ty Y d S w �N)�force_close_all� Exception)�resource� r �G/home/arjun/projects/env/lib/python3.10/site-packages/kombu/resource.py�_after_fork_cleanup_resource s
�r c @ s e Zd ZdZdd� ZdS )r z#Last in first out version of Queue.c C s t � | _d S r )r �queue)�self�maxsizer r r �_init � zLifoQueue._initN)�__name__�
__module__�__qualname__�__doc__r r r r r r s r c @ s� e Zd ZdZejZdZd&dd�Zdd� Zdd � Z d'd
d�Z
dd
� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zd(dd�Zd)dd�Zedd � �Zejd!d � �Zej�d"�rfe
ZeZd#Zd$d� Z
d%d� ZdS dS )*�ResourcezPool of resources.FNc C s^ || _ |pd| _d| _|d ur|n| j| _t� | _t� | _| jr)td ur)t| t � | �
� d S )Nr F)�_limit�preload�_closed�close_after_forkr � _resource�set�_dirtyr r �setup)r �limitr r r r r �__init__( s
��
zResource.__init__c C s t d��)Nzsubclass responsibility)�NotImplementedError�r r r r r$ 7 s zResource.setupc C s6 | j rt| j�| j kr| �| j ��| j�| �� � d S r )r% �lenr# �
LimitExceededr! �
put_nowait�newr( r r r �_add_when_empty: s zResource._add_when_emptyc s� �j rtd���jrM z
�jj||d�� W n
ty" ��� Y n)w z��� �� W n tyC t � t
�r=�j�� � � ��� � � w �j
�� � nqn����� �� � �fdd�}|� _� S )a� Acquire resource.
Arguments:
---------
block (bool): If the limit is exceeded,
then block until there is an available item.
timeout (float): Timeout to wait
if ``block`` is true. Default is :const:`None` (forever).
Raises
------
LimitExceeded: if block is false and the limit has been exceeded.
zAcquire on closed poolr )�block�timeoutc s �� � � dS )a' Release resource so it can be used by another thread.
Warnings:
--------
The caller is responsible for discarding the object,
and to never use the resource again. A new resource must
be acquired if so needed.
N)�releaser ��Rr r r r0 h s z!Resource.acquire.<locals>.release)r �RuntimeErrorr% r! �getr r- �prepare�
BaseException�
isinstancer
r+ r0 r# �addr, )r r. r/ r0 r r1 r �acquireB s4 �
���
zResource.acquirec C s |S r r �r r r r r r5 v � zResource.preparec C s |� � d S r )�closer: r r r �close_resourcey r zResource.close_resourcec C � d S r r r: r r r �release_resource| r; zResource.release_resourcec C s | j r | j�|� | �|� dS )zqReplace existing resource with a new instance.
This can be used in case of defective resources.
N)r% r# �discardr= r: r r r �replace s zResource.replacec C s: | j r| j�|� | j�|� | �|� d S | �|� d S r )r% r# r@ r! r+ r? r= r: r r r r0 � s
zResource.releasec C r>