관리-도구
편집 파일: thread.cpython-36.pyc
3 � f� � @ s� d Z dZddlZddlmZ ddlZddlZddlZddlZddl Z ej � Zdadd� Z eje � G dd � d e�Zd d� ZG dd � d ej�ZdS )zImplements ThreadPoolExecutor.z"Brian Quinlan (brian@sweetapp.com)� N)�_baseFc C sJ da ttj� �} x| D ]\}}|jd � qW x| D ]\}}|j� q2W d S )NT)� _shutdown�list�_threads_queues�items�put�join)r �t�q� r �>/opt/alt/python36/lib64/python3.6/concurrent/futures/thread.py�_python_exit! s r c @ s e Zd Zdd� Zdd� ZdS )� _WorkItemc C s || _ || _|| _|| _d S )N)�future�fn�args�kwargs)�selfr r r r r r r �__init__- s z_WorkItem.__init__c C sf | j j� sd S y| j| j| j�}W n2 tk rT } z| j j|� d } W Y d d }~X nX | j j|� d S )N)r Zset_running_or_notify_cancelr r r � BaseExceptionZ set_exceptionZ set_result)r �result�excr r r �run3 s z _WorkItem.runN)�__name__� __module__�__qualname__r r r r r r r , s r c C s| yRxL|j dd�}|d k r$|j� ~q| � }ts<|d ks<|jrJ|jd � d S ~qW W n$ tk rv tjjddd� Y nX d S )NT)�blockzException in worker)�exc_info)�getr r r r r ZLOGGERZcritical)Zexecutor_referenceZ work_queueZ work_itemZexecutorr r r �_worker@ s r c @ sR e Zd Zej� jZddd�Zdd� Ze j jje_dd� Zd d d�Z e j j je _dS )�ThreadPoolExecutorN� c C sf |dkrt j� pdd }|dkr(td��|| _tj� | _t� | _d| _ t j� | _|p^d| j � | _dS )a Initializes a new ThreadPoolExecutor instance. Args: max_workers: The maximum number of threads that can be used to execute the given calls. thread_name_prefix: An optional name prefix to give our threads. N� � r z"max_workers must be greater than 0FzThreadPoolExecutor-%d)�os� cpu_count� ValueError�_max_workers�queueZQueue�_work_queue�set�_threadsr � threadingZLock�_shutdown_lock�_counter�_thread_name_prefix)r Zmax_workersZthread_name_prefixr r r r [ s zThreadPoolExecutor.__init__c O sN | j �> | jrtd��tj� }t||||�}| jj|� | j� |S Q R X d S )Nz*cannot schedule new futures after shutdown) r- r �RuntimeErrorr ZFuturer r) r �_adjust_thread_count)r r r r �f�wr r r �submitr s zThreadPoolExecutor.submitc C sz | j fdd�}t| j�}|| jk rvd| jp,| |f }tj|ttj | |�| j fd�}d|_ |j� | jj|� | j t |<