Yf @ s d Z d Z d d l Z d d l m Z d d l Z d d l Z d d l Z d d l Z e j Z
d a d d Z e j
e Gd d d e Z d
d Z Gd d
d
e j Z d S)zImplements ThreadPoolExecutor.z"Brian Quinlan (brian@sweetapp.com) N)_baseFc C sa d a t t j } x! | D] \ } } | j d q Wx | D] \ } } | j qC Wd S)NT) _shutdownlist_threads_queuesitemsputjoin)r tq r >/opt/alt/python35/lib64/python3.5/concurrent/futures/thread.py_python_exit s r
c @ s( e Z d Z d d Z d d Z d S) _WorkItemc C s( | | _ | | _ | | _ | | _ d S)N)futurefnargskwargs)selfr r r r r r r __init__, s z_WorkItem.__init__c C s{ | j j s d Sy | j | j | j } Wn5 t k
rf } z | j j | WYd d } ~ Xn X| j j | d S)N)r Zset_running_or_notify_cancelr r r
BaseExceptionZ
set_exceptionZ
set_result)r resulter r r run2 s #z
_WorkItem.runN)__name__
__module____qualname__r r r r r r r + s r c C s yq xj | j d d } | d k r4 | j ~ q | } t sX | d k sX | j ri | j d d S~ q WWn( t k
r t j j d d d Yn Xd S)NblockTzException in workerexc_info)getr r r r r ZLOGGERZcritical)Zexecutor_referenceZ
work_queueZ work_itemZexecutorr r r _worker= s
r c @ sj e Z d Z d d d Z d d Z e j j j e _ d d Z d d d
Z e j j j e _ d S)ThreadPoolExecutorNc C sz | d k r" t j p d d } | d k r: t d | | _ t j | _ t | _ d | _ t
j | _ d S)zInitializes a new ThreadPoolExecutor instance.
Args:
max_workers: The maximum number of threads that can be used to
execute the given calls.
N r z"max_workers must be greater than 0F)
os cpu_count
ValueError_max_workersqueueZQueue_work_queueset_threadsr threadingZLock_shutdown_lock)r Zmax_workersr r r r T s zThreadPoolExecutor.__init__c O si | j Y | j r t d t j } t | | | | } | j j | | j | SWd QRXd S)Nz*cannot schedule new futures after shutdown) r, r RuntimeErrorr ZFuturer r( r _adjust_thread_count)r r r r fwr r r submith s
zThreadPoolExecutor.submitc C s | j d d } t | j | j k r t j d t d t j | | | j f } d | _ | j
| j j | | j t |