B ÿ¥§›”^ä™ã@s0ddgZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z m Z dZ dZ dZe ¡Zdd „Zd d „ZGd d „d eƒZGdd„dƒZdd„ZGdd„deƒZd$dd„Zdd„ZGdd„deƒZGdd„deƒZeZGdd„deƒZGdd „d eƒZGd!d"„d"eƒZ Gd#d„deƒZ!dS)%ÚPoolÚ ThreadPooléNé)Úutil)Ú get_contextÚ TimeoutErrorécCs tt|ŽƒS)N)ÚlistÚmap)Úargs©r ú7/opt/alt/python37/lib/python3.7/multiprocessing/pool.pyÚmapstar+srcCstt |d|d¡ƒS)Nrr)r Ú itertoolsÚstarmap)r r r r Ú starmapstar.src@seZdZdd„Zdd„ZdS)ÚRemoteTracebackcCs ||_dS)N)Útb)Úselfrr r r Ú__init__6szRemoteTraceback.__init__cCs|jS)N)r)rr r r Ú__str__8szRemoteTraceback.__str__N)Ú__name__Ú __module__Ú __qualname__rrr r r r r5src@seZdZdd„Zdd„ZdS)ÚExceptionWithTracebackcCs0t t|ƒ||¡}d |¡}||_d||_dS)NÚz """ %s""")Ú tracebackÚformat_exceptionÚtypeÚjoinÚexcr)rr rr r r r<s zExceptionWithTraceback.__init__cCst|j|jffS)N)Ú rebuild_excr r)rr r r Ú __reduce__Asz!ExceptionWithTraceback.__reduce__N)rrrrr"r r r r r;srcCst|ƒ|_|S)N)rÚ __cause__)r rr r r r!Ds r!cs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)ÚMaybeEncodingErrorcs.t|ƒ|_t|ƒ|_tt|ƒ |j|j¡dS)N)Úreprr ÚvalueÚsuperr$r)rr r&)Ú __class__r r rPs  zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r&r )rr r r rUszMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r(r)rr r r Ú__repr__YszMaybeEncodingError.__repr__)rrrrrr)Ú __classcell__r r )r(r r$Ls r$r Fc CsÌ|dk r(t|tƒr|dks(td |¡ƒ‚|j}|j}t|dƒrR|j ¡|j  ¡|dk rb||Žd}xP|dks‚|r¸||kr¸y |ƒ} Wn$t t fk r°t   d¡PYnX| dkrÆt   d¡P| \} } } } }yd| | |Žf}WnHtk r.}z(|r| tk rt||jƒ}d|f}Wdd}~XYnXy|| | |fƒWnRtk r”}z2t||dƒ}t   d |¡|| | d|ffƒWdd}~XYnXd} } }} } }|d7}qjWt   d |¡dS) NrzMaxtasks {!r} is not validÚ_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks)Ú isinstanceÚintÚAssertionErrorÚformatÚputÚgetÚhasattrr+ÚcloseÚ_readerÚEOFErrorÚOSErrorrÚdebugÚ ExceptionÚ_helper_reraises_exceptionrÚ __traceback__r$)ÚinqueueÚoutqueueÚ initializerÚinitargsZmaxtasksZwrap_exceptionr0r1Z completedÚtaskÚjobÚiÚfuncr ÚkwdsÚresultÚeÚwrappedr r r Úworker]sJ       $ rGcCs|‚dS)Nr )Zexr r r r9Šsr9c@s(eZdZdZdd„Zd=dd„Zdd „Zd d „Zd d „Zdd„Z difdd„Z d>dd„Z d?dd„Z d@dd„Z dd„ZdAdd„ZdBdd„Zdiddfdd „ZdCd!d"„ZdDd#d$„Zed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZd-d.„Zd/d0„Zd1d2„Zd3d4„Zed5d6„ƒZed7d8„ƒZd9d:„Z d;d<„Z!dS)ErTcOs|jj||ŽS)N)Ú_ctxÚProcess)rr rCr r r rI˜sz Pool.ProcessNr c Csl|ptƒ|_| ¡t ¡|_i|_t|_||_ ||_ ||_ |dkrPt   ¡pNd}|dkr`tdƒ‚|dk rxt|ƒsxtdƒ‚||_g|_| ¡tjtj|fd|_d|j_t|j_|j ¡tjtj|j|j|j|j|jfd|_d|j_t|j_|j ¡tjtj|j|j |jfd|_!d|j!_t|j!_|j! ¡t"j#||j$|j|j%|j|j|j|j|j!|jfdd|_&dS)Nrz&Number of processes must be at least 1zinitializer must be a callable)Útargetr Té)r Z exitpriority)'rrHÚ _setup_queuesÚqueueÚ SimpleQueueÚ _taskqueueÚ_cacheÚRUNÚ_stateÚ_maxtasksperchildÚ _initializerÚ _initargsÚosÚ cpu_countÚ ValueErrorÚcallableÚ TypeErrorÚ _processesÚ_poolÚ_repopulate_poolÚ threadingZThreadrÚ_handle_workersÚ_worker_handlerÚdaemonÚstartÚ _handle_tasksÚ _quick_putÚ _outqueueÚ _task_handlerÚ_handle_resultsÚ _quick_getÚ_result_handlerrZFinalizeÚ_terminate_poolÚ_inqueueÚ _terminate)rÚ processesr=r>ZmaxtasksperchildÚcontextr r r r›sT         z Pool.__init__cCsZd}xPttt|jƒƒƒD]:}|j|}|jdk rt d|¡| ¡d}|j|=qW|S)NFzcleaning up worker %dT)ÚreversedÚrangeÚlenr\Úexitcoderr7r)rZcleanedrArGr r r Ú_join_exited_workersÔs   zPool._join_exited_workersc Cs|xvt|jt|jƒƒD]^}|jt|j|j|j|j |j |j fd}|j  |¡|j  dd¡|_ d|_| ¡t d¡qWdS)N)rJr rIZ PoolWorkerTz added worker)rpr[rqr\rIrGrkrerTrUrSÚ_wrap_exceptionÚappendÚnameÚreplacerarbrr7)rrAÚwr r r r]ãs  zPool._repopulate_poolcCs| ¡r| ¡dS)N)rsr])rr r r Ú_maintain_poolôszPool._maintain_poolcCs4|j ¡|_|j ¡|_|jjj|_|jjj|_ dS)N) rHrNrkrer+Úsendrdr4Úrecvrh)rr r r rLús   zPool._setup_queuescCs| |||¡ ¡S)N)Ú apply_asyncr1)rrBr rCr r r Úapplysz Pool.applycCs| ||t|¡ ¡S)N)Ú _map_asyncrr1)rrBÚiterableÚ chunksizer r r r szPool.mapcCs| ||t|¡ ¡S)N)r~rr1)rrBrr€r r r rsz Pool.starmapcCs| ||t|||¡S)N)r~r)rrBrr€ÚcallbackÚerror_callbackr r r Ú starmap_asyncs zPool.starmap_asyncc csny0d}x&t|ƒD]\}}||||fifVqWWn8tk rh}z||dt|fifVWdd}~XYnXdS)Néÿÿÿÿr)Ú enumerater8r9)rZ result_jobrBrrAÚxrEr r r Ú_guarded_task_generations zPool._guarded_task_generationrcCs¤|jtkrtdƒ‚|dkrFt|jƒ}|j | |j||¡|j f¡|S|dkr\td  |¡ƒ‚t   |||¡}t|jƒ}|j | |jt |¡|j f¡dd„|DƒSdS)NzPool not runningrzChunksize must be 1+, not {0:n}css|]}|D] }|Vq qdS)Nr )Ú.0ÚchunkÚitemr r r ú EszPool.imap..)rRrQrXÚ IMapIteratorrPrOr0r‡Ú_jobÚ _set_lengthr/rÚ _get_tasksr)rrBrr€rDÚ task_batchesr r r Úimap)s(     z Pool.imapcCs¤|jtkrtdƒ‚|dkrFt|jƒ}|j | |j||¡|j f¡|S|dkr\td  |¡ƒ‚t   |||¡}t|jƒ}|j | |jt |¡|j f¡dd„|DƒSdS)NzPool not runningrzChunksize must be 1+, not {0!r}css|]}|D] }|Vq qdS)Nr )rˆr‰rŠr r r r‹bsz&Pool.imap_unordered..)rRrQrXÚIMapUnorderedIteratorrPrOr0r‡rrŽr/rrr)rrBrr€rDrr r r Úimap_unorderedGs&      zPool.imap_unorderedcCsB|jtkrtdƒ‚t|j||ƒ}|j |jd|||fgdf¡|S)NzPool not runningr)rRrQrXÚ ApplyResultrPrOr0r)rrBr rCrr‚rDr r r r|ds  zPool.apply_asynccCs| ||t|||¡S)N)r~r)rrBrr€rr‚r r r Ú map_asyncoszPool.map_asyncc Csª|jtkrtdƒ‚t|dƒs$t|ƒ}|dkrTtt|ƒt|jƒdƒ\}}|rT|d7}t|ƒdkrdd}t  |||¡}t |j |t|ƒ||d} |j   | | j||¡df¡| S)NzPool not runningÚ__len__érr)r‚)rRrQrXr2r Údivmodrqr\rrÚ MapResultrPrOr0r‡r) rrBrZmapperr€rr‚ZextrarrDr r r r~ws&   zPool._map_asynccCsTt ¡}x0|jtks$|jr8|jtkr8| ¡t d¡q W|j   d¡t   d¡dS)Ngš™™™™™¹?zworker handler exiting) r^Úcurrent_threadrRrQrPÚ TERMINATEryÚtimeÚsleeprOr0rr7)ÚpoolÚthreadr r r r_•s  zPool._handle_workersc Csjt ¡}xöt|jdƒD]Ü\}}d}zÀx¸|D]„}|jr@t d¡Py ||ƒWq*tk r¬} zB|dd…\} } y||  | d| f¡Wnt k ršYnXWdd} ~ XYq*Xq*W|rÜt d¡|rÌ|dnd} || dƒwPWdd}}} XqWt d¡y:t d¡|  d¡t d ¡x|D]} |dƒq&WWn t k rZt d ¡YnXt d ¡dS) Nz'task handler found thread._state != RUNrFzdoing set_length()rr„ztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting) r^ršÚiterr1rRrr7r8Ú_setÚKeyErrorr0r6) Ú taskqueuer0r<ržÚcacherŸZtaskseqZ set_lengthr?rEr@ÚidxÚpr r r rc¢sB          zPool._handle_tasksc Cs¶t ¡}x˜y |ƒ}Wn"ttfk r6t d¡dSX|jrJt d¡P|dkr^t d¡P|\}}}y|| ||¡Wntk rYnXd}}}q Wxœ|r>|jt kr>y |ƒ}Wn"ttfk rât d¡dSX|dkrút d¡q¤|\}}}y|| ||¡Wntk r.YnXd}}}q¤Wt |dƒržt d¡y,x&t dƒD]}|j   ¡stP|ƒqbWWnttfk rœYnXt dt|ƒ|j¡dS) Nz.result handler got EOFError/OSError -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr4z"ensuring that outqueue is not fullé z7result handler exiting: len(cache)=%s, thread._state=%s)r^ršr6r5rr7rRr¡r¢r›r2rpr4Úpollrq)r<r1r¤rŸr?r@rAÚobjr r r rgÐsZ             zPool._handle_resultsccs4t|ƒ}x&tt ||¡ƒ}|s"dS||fVq WdS)N)r ÚtuplerÚislice)rBÚitÚsizer†r r r r s zPool._get_taskscCs tdƒ‚dS)Nz:pool objects cannot be passed between processes or pickled)ÚNotImplementedError)rr r r r"szPool.__reduce__cCs&t d¡|jtkr"t|_t|j_dS)Nz closing pool)rr7rRrQÚCLOSEr`)rr r r r3s  z Pool.closecCs$t d¡t|_t|j_| ¡dS)Nzterminating pool)rr7r›rRr`rl)rr r r Ú terminate s zPool.terminatecCsnt d¡|jtkrtdƒ‚n|jttfkr4tdƒ‚|j ¡|j  ¡|j  ¡x|j D] }| ¡qZWdS)Nz joining poolzPool is still runningzIn unknown state) rr7rRrQrXr¯r›r`rrfrir\)rr¦r r r r&s       z Pool.joincCsDt d¡|j ¡x*| ¡r>|j ¡r>|j ¡t  d¡qWdS)Nz7removing tasks from inqueue until task handler finishedr) rr7Z_rlockÚacquireÚis_aliver4r¨r{rœr)r;Ú task_handlerr­r r r Ú_help_stuff_finish2s    zPool._help_stuff_finishc CsJt d¡t|_t|_t d¡| ||t|ƒ¡| ¡sNt|ƒdkrNtdƒ‚t|_| d¡t d¡t   ¡|k r||  ¡|r¸t |ddƒr¸t d¡x|D]} | j dkrž|  ¡qžWt d¡t   ¡|k rÖ|  ¡t d ¡t   ¡|k rô|  ¡|rFt |ddƒrFt d ¡x0|D](} |  ¡rt d | j¡|   ¡qWdS) Nzfinalizing poolz&helping task handler/workers to finishrz.Cannot have cache with result_hander not alivezjoining worker handlerr°zterminating workerszjoining task handlerzjoining result handlerzjoining pool workerszcleaning up worker %d)rr7r›rRr´rqr²r.r0r^ršrr2rrr°Úpid) Úclsr£r;r<ržZworker_handlerr³Zresult_handlerr¤r¦r r r rj;s<                zPool._terminate_poolcCs|S)Nr )rr r r Ú __enter__kszPool.__enter__cCs | ¡dS)N)r°)rÚexc_typeZexc_valZexc_tbr r r Ú__exit__nsz Pool.__exit__)NNr NN)N)N)NNN)r)r)NNN)NNN)"rrrrtrIrrsr]ryrLr}r rrƒr‡r‘r“r|r•r~Ú staticmethodr_rcrgrr"r3r°rr´Ú classmethodrjr·r¹r r r r r’sD 8         . <  0c@s@eZdZdd„Zdd„Zdd„Zddd „Zdd d „Zd d „ZdS)r”cCs4t ¡|_ttƒ|_||_||_||_|||j<dS)N) r^ZEventÚ_eventÚnextÚ job_counterrrPÚ _callbackÚ_error_callback)rr¤rr‚r r r rws   zApplyResult.__init__cCs |j ¡S)N)r¼Zis_set)rr r r ÚreadyszApplyResult.readycCs| ¡std |¡ƒ‚|jS)Nz{0!r} not ready)rÁrXr/Ú_success)rr r r Ú successful‚szApplyResult.successfulNcCs|j |¡dS)N)r¼Úwait)rÚtimeoutr r r rćszApplyResult.waitcCs,| |¡| ¡st‚|jr"|jS|j‚dS)N)rÄrÁrrÂÚ_value)rrÅr r r r1Šs  zApplyResult.getcCsT|\|_|_|jr$|jr$| |j¡|jr<|js<| |j¡|j ¡|j|j=dS)N)rÂrÆr¿rÀr¼ÚsetrPr)rrAr©r r r r¡“s      zApplyResult._set)N)N) rrrrrÁrÃrÄr1r¡r r r r r”us   r”c@seZdZdd„Zdd„ZdS)r™cCsftj||||dd|_dg||_||_|dkrLd|_|j ¡||j=n||t ||ƒ|_dS)N)r‚Tr) r”rrÂrÆÚ _chunksizeÚ _number_leftr¼rÇrÚbool)rr¤r€Úlengthrr‚r r r r¤s    zMapResult.__init__cCsº|jd8_|\}}|rp|jrp||j||j|d|j…<|jdkr¶|jrZ| |j¡|j|j=|j ¡nF|s†|jr†d|_||_|jdkr¶|j r¢|  |j¡|j|j=|j ¡dS)NrrF) rÉrÂrÆrÈr¿rPrr¼rÇrÀ)rrAZsuccess_resultÚsuccessrDr r r r¡±s"         zMapResult._setN)rrrrr¡r r r r r™¢s r™c@s:eZdZdd„Zdd„Zd dd„ZeZdd „Zd d „ZdS) rŒcCsJt t ¡¡|_ttƒ|_||_t  ¡|_ d|_ d|_ i|_ |||j<dS)Nr)r^Z ConditionZLockÚ_condr½r¾rrPÚ collectionsÚdequeÚ_itemsÚ_indexÚ_lengthÚ _unsorted)rr¤r r r rÍs  zIMapIterator.__init__cCs|S)Nr )rr r r Ú__iter__×szIMapIterator.__iter__Nc Cs¨|j„y|j ¡}Wnntk r„|j|jkr8td‚|j |¡y|j ¡}Wn,tk r~|j|jkrttd‚td‚YnXYnXWdQRX|\}}|r |S|‚dS)N) rÍrÐÚpopleftÚ IndexErrorrÑrÒÚ StopIterationrÄr)rrÅrŠrÌr&r r r r½Ús"   zIMapIterator.nextc Cs |j|j|krr|j |¡|jd7_x8|j|jkrd|j |j¡}|j |¡|jd7_q.W|j ¡n ||j|<|j|jkr’|j|j =WdQRXdS)Nr) rÍrÑrÐrurÓÚpopÚnotifyrÒrPr)rrAr©r r r r¡ðs      zIMapIterator._setc Cs<|j,||_|j|jkr.|j ¡|j|j=WdQRXdS)N)rÍrÒrÑrÙrPr)rrËr r r rŽs   zIMapIterator._set_length)N) rrrrrÔr½Ú__next__r¡rŽr r r r rŒËs   rŒc@seZdZdd„ZdS)r’c CsP|j@|j |¡|jd7_|j ¡|j|jkrB|j|j=WdQRXdS)Nr)rÍrÐrurÑrÙrÒrPr)rrAr©r r r r¡ s    zIMapUnorderedIterator._setN)rrrr¡r r r r r’ sr’c@s:eZdZdZedd„ƒZd dd„Zdd „Zed d „ƒZdS) rFcOsddlm}|||ŽS)Nr)rI)ZdummyrI)r rCrIr r r rIs zThreadPool.ProcessNr cCst ||||¡dS)N)rr)rrmr=r>r r r r!szThreadPool.__init__cCs,t ¡|_t ¡|_|jj|_|jj|_dS)N)rMrNrkrer0rdr1rh)rr r r rL$s   zThreadPool._setup_queuescCsNyx|jddqWWntjk r,YnXxt|ƒD]}| d¡q8WdS)NF)Úblock)r1rMZEmptyrpr0)r;r³r­rAr r r r´*szThreadPool._help_stuff_finish)NNr ) rrrrtrºrIrrLr´r r r r rs   )Nr NF)"Ú__all__r^rMrrÎrVrœrrrrrrQr¯r›Úcountr¾rrr8rrr!r$rGr9Úobjectrr”Z AsyncResultr™rŒr’rr r r r Ú s@   ,f')@