Ë
    ™V.jI  ã                   óœ  — d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ dZddhZdZdZ G d„ dej:                  «      Z G d„ dej<                  «      Z G d„ dej<                  «      Z G d„ dej<                  «      Z  G d„ dej:                  «      Z! G d„ dej<                  «      Z"y)zWorker-level Bootsteps.é    N)ÚHub)Úget_event_loopÚset_event_loop)Ú	DummyLockÚLaxBoundedSemaphore)ÚTimer)Ú	bootsteps)Ú_set_task_join_will_block)ÚImproperlyConfigured)Ú
IS_WINDOWS)Úworker_logger)r   r   ÚPoolÚBeatÚStateDBÚConsumerÚeventletÚgeventzO-B option doesn't work with eventlet/gevent pools: use standalone beat instead.z©
The worker_pool setting shouldn't be used to select the eventlet/gevent
pools, instead you *must use the -P* argument so that patches are applied
as early as possible.
c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)r   zTimer bootstep.c                 ó  — |j                   rt        d¬«      |_        y |j                  s|j                  j
                  |_        | j                  |j                  |j                  | j                  | j                  ¬«      |_        y )Ng      $@)Úmax_interval)r   Úon_errorÚon_tick)
Úuse_eventloopÚ_TimerÚtimerÚ	timer_clsÚpool_clsr   ÚinstantiateÚtimer_precisionÚon_timer_errorÚon_timer_tick©ÚselfÚws     úZC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/worker/components.pyÚcreatezTimer.create#   sh   € Ø�?Š?ä¨$Ô/ˆA�Gà—;’;ð  Ÿj™j×.Ñ.�”Ø×&Ñ& q§{¡{Ø45×4EÑ4EØ04×0CÑ0CØ/3×/AÑ/Að 'ó CˆA�Gó    c                 ó4   — t        j                  d|d¬«       y )NzTimer error: %rT)Úexc_info)ÚloggerÚerror)r#   Úexcs     r%   r    zTimer.on_timer_error1   s   € Ü�‰Ð&¨°dÖ;r'   c                 ó0   — t        j                  d|«       y )Nz Timer wake-up! Next ETA %s secs.)r*   Údebug)r#   Údelays     r%   r!   zTimer.on_timer_tick4   s   € Ü�‰Ð7¸Õ?r'   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r    r!   © r'   r%   r   r       s   „ ÙòCò<ó@r'   r   c                   óL   ‡ — e Zd ZdZefZˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zˆ xZS )	r   zWorker starts the event loop.c                 ó4   •— d |_         t        ‰| �  |fi |¤Ž y ©N)ÚhubÚsuperÚ__init__©r#   r$   ÚkwargsÚ	__class__s      €r%   r:   zHub.__init__=   s   ø€ ØˆŒÜ‰Ñ˜Ñ%˜fÓ%r'   c                 ó   — |j                   S r7   )r   r"   s     r%   Ú
include_ifzHub.include_ifA   s   € Ø�‰Ðr'   c                 óÜ   — t        «       |_        |j                  €?t        |j                  dd «      }t	         |r|nt
        |j                  «      «      |_        | j                  |«       | S )NÚrequires_hub)r   r8   ÚgetattrÚ	_conninfor   Ú_Hubr   Ú_patch_thread_primitives)r#   r$   Úrequired_hubs      r%   r&   z
Hub.createD   s\   € ÜÓ ˆŒØ�5‰5ˆ=Ü" 1§;¡;°ÀÓEˆLÜ"Ø6¡‘´$¸¿¹ó$Aó BˆAŒEà×%Ñ% aÔ(Øˆr'   c                  ó   — y r7   r4   r"   s     r%   Ústartz	Hub.startM   s   € Ør'   c                 ó8   — |j                   j                  «        y r7   ©r8   Úcloser"   s     r%   ÚstopzHub.stopP   ó   € Ø	�‰�‰�r'   c                 ó8   — |j                   j                  «        y r7   rJ   r"   s     r%   Ú	terminatezHub.terminateS   rM   r'   c                 óŒ   — t        «       |j                  j                  _        	 ddlm} t         |_        y # t        $ r Y y w xY w)Nr   )Úpool)r   ÚappÚclockÚmutexÚbilliardrQ   ÚLockÚImportError)r#   r$   rQ   s      r%   rE   zHub._patch_thread_primitivesV   s9   € ä%›Kˆ�‰�‰Ôð	"Ý%ô "ˆD�Iøô ò 	Ùð	ús   ¥7 ·	AÁA)r0   r1   r2   r3   r   Úrequiresr:   r?   r&   rH   rL   rO   rE   Ú__classcell__©r=   s   @r%   r   r   8   s0   ø„ Ù'àˆx€Hô&òòòòòö	"r'   r   c                   óH   ‡ — e Zd ZdZefZdˆ fd„	Zd„ Zd„ Zd„ Z	d„ Z
d„ Zˆ xZS )	r   a
  Bootstep managing the worker pool.

    Describes how to initialize the worker pool, and starts and stops
    the pool during worker start-up/shutdown.

    Adds attributes:

        * autoscale
        * pool
        * max_concurrency
        * min_concurrency
    c                 ód  •— d |_         d |_        |j                  |_        |j                  | _        t        |t        «      r3|j                  d«      \  }}}t        |«      |xr t        |«      xs dg}||_	        |j                  r|j                  \  |_        |_        t        ‰| �,  |fi |¤Ž y )NÚ,r   )rQ   Úmax_concurrencyÚconcurrencyÚmin_concurrencyÚoptimizationÚ
isinstanceÚstrÚ	partitionÚintÚ	autoscaler9   r:   )r#   r$   rf   r<   Úmax_cÚ_Úmin_cr=   s          €r%   r:   zPool.__init__r   sš   ø€ ØˆŒØ ˆÔØŸM™MˆÔØŸN™NˆÔÜ�i¤Ô%Ø'×1Ñ1°#Ó6‰OˆE�1�eÜ˜U› UÒ%9¬s°5«zÒ%>¸QÐ?ˆIØˆŒØ�;Š;Ø34·;±;Ñ0ˆAÔ˜qÔ0Ü‰Ñ˜Ñ%˜fÓ%r'   c                 óR   — |j                   r|j                   j                  «        y y r7   )rQ   rK   r"   s     r%   rK   z
Pool.close   s   € Ø�6Š6Ø�F‰F�L‰L�Nð r'   c                 óR   — |j                   r|j                   j                  «        y y r7   )rQ   rO   r"   s     r%   rO   zPool.terminateƒ   s   € Ø�6Š6Ø�F‰F×ÑÕð r'   c                 óŽ  — d }d }|j                   j                  j                  t        v r"t	        j
                  t        t        «      «       |j                   xs t        }|j                  }|j                  |_        |s}t        |«      x}|_        |j                  j                  |_        |j                  j"                  |_        d}|j&                  r'|j(                  j*                  r|j,                  |_        |j.                  }| j1                  |j(                  |j                  |j                   |j2                  f|j4                  |j6                  |j8                  |j:                  |j&                  xr ||j<                  |||d|| j>                  |j                   ¬«      x}|_         tC        |jD                  «       |S )Néd   T)ÚinitargsÚmaxtasksperchildÚmax_memory_per_childÚtimeoutÚsoft_timeoutÚputlocksÚlost_worker_timeoutÚthreadsÚmax_restartsÚallow_restartÚforking_enableÚ	semaphoreÚsched_strategyrR   )#rR   ÚconfÚworker_poolÚGREEN_POOLSÚwarningsÚwarnÚUserWarningÚW_POOL_SETTINGr   r   r`   Ú_process_taskÚprocess_taskr   ry   ÚacquireÚ_quick_acquireÚreleaseÚ_quick_releaseÚpool_putlocksr   Úuses_semaphoreÚ_process_task_semÚpool_restartsr   ÚhostnameÚmax_tasks_per_childrp   Ú
time_limitÚsoft_time_limitÚworker_lost_waitra   rQ   r
   Útask_join_will_block)r#   r$   ry   rv   ÚthreadedÚprocsrw   rQ   s           r%   r&   zPool.create‡   sh  € Øˆ	ØˆØ�5‰5�:‰:×!Ñ!¤[Ñ0Ü�M‰Mœ+¤nÓ5Ô6Ø—‘Ð&Ò4¬*ˆØ×!Ñ!ˆØŸ™ˆŒÙÜ&9¸%Ó&@Ð@ˆI˜œØ Ÿ{™{×2Ñ2ˆAÔØ Ÿ{™{×2Ñ2ˆAÔØˆLØ�Š 1§:¡:×#<Ò#<Ø!"×!4Ñ!4�”ØŸ™ˆØ×(Ñ(Ø�J‰J˜×)Ñ)Ø—e‘e˜QŸZ™ZÐ(Ø×2Ñ2Ø!"×!7Ñ!7Ø—L‘LØ×*Ñ*Ø—_‘_Ò1¨Ø !× 2Ñ 2ØØ%Ø'ØØØ×,Ñ,Ø—‘ð )ó 
ð 	
ˆˆqŒvô" 	" $×";Ñ";Ô<Øˆr'   c                 óP   — d|j                   r|j                   j                  iS diS )NrQ   zN/A)rQ   Úinfor"   s     r%   r•   z	Pool.info«   s#   € Ø q§v¢v˜Ÿ™Ÿ™Ð9Ð9°5Ð9Ð9r'   c                 ó:   — |j                   j                  |«       y r7   )rQ   Úregister_with_event_loop)r#   r$   r8   s      r%   r—   zPool.register_with_event_loop®   s   € Ø	�‰×'Ñ'¨Õ,r'   r7   )r0   r1   r2   r3   r   rX   r:   rK   rO   r&   r•   r—   rY   rZ   s   @r%   r   r   b   s0   ø„ ñð ˆv€Hõ&òòò"òH:ö-r'   r   c                   ó2   ‡ — e Zd ZdZd ZdZdˆ fd„	Zd„ Zˆ xZS )r   zWStep used to embed a beat process.

    Enabled when the ``beat`` argument is set.
    Tc                 óT   •— |x| _         |_        d |_        t        ‰| �  |fd|i|¤Ž y )NÚbeat)Úenabledrš   r9   r:   )r#   r$   rš   r<   r=   s       €r%   r:   zBeat.__init__»   s/   ø€ Ø $Ð$ˆŒ�q”vØˆŒÜ‰Ñ˜Ñ0 Ð0¨Ó0r'   c                 óÚ   — ddl m} |j                  j                  j	                  d«      rt        t        «      ‚ ||j                  |j                  |j                  ¬«      x}|_
        |S )Nr   )ÚEmbeddedService)r   r   )Úschedule_filenameÚscheduler_cls)Úcelery.beatr�   r   r1   Úendswithr   ÚERR_B_GREENrR   rž   Ú	schedulerrš   )r#   r$   r�   Úbs       r%   r&   zBeat.createÀ   s[   € Ý/Ø�:‰:× Ñ ×)Ñ)Ð*@ÔAÜ&¤{Ó3Ð3Ù$ Q§U¡UØ78×7JÑ7JØ34·;±;ô@ð 	@ˆˆAŒFð ˆr'   )F)	r0   r1   r2   r3   ÚlabelÚconditionalr:   r&   rY   rZ   s   @r%   r   r   ²   s   ø„ ñð
 €EØ€Kõ1ö
r'   r   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )r   z:Bootstep that sets up between-restart state database file.c                 óV   •— |j                   | _        d |_        t        ‰| �  |fi |¤Ž y r7   )Ústatedbr›   Ú_persistencer9   r:   r;   s      €r%   r:   zStateDB.__init__Í   s'   ø€ Ø—y‘yˆŒØˆŒÜ‰Ñ˜Ñ%˜fÓ%r'   c                 óê   — |j                   j                  |j                   |j                  |j                  j                  «      |_        t        j                  |j
                  j                  «       y r7   )	ÚstateÚ
Persistentr©   rR   rS   rª   ÚatexitÚregisterÚsaver"   s     r%   r&   zStateDB.createÒ   sB   € ØŸ™×+Ñ+¨A¯G©G°Q·Y±YÀÇÁÇÁÓLˆŒÜ�‰˜Ÿ™×+Ñ+Õ,r'   )r0   r1   r2   r3   r:   r&   rY   rZ   s   @r%   r   r   Ê   s   ø„ ÙDô&ö
-r'   r   c                   ó   — e Zd ZdZdZd„ Zy)r   z)Bootstep starting the Consumer blueprint.Tc                 óÔ  — |j                   r$t        |j                   d«      |j                  z  }n|j                  |j                  z  }| j	                  |j
                  |j                  |j                  |j                  |j                  ||j                  |j                  |j                  ||j                  |j                  |j                  |j                  ¬«      x}|_        |S )Né   )rŒ   Útask_eventsÚinit_callbackÚinitial_prefetch_countrQ   r   rR   Ú
controllerr8   Úworker_optionsÚdisable_rate_limitsÚprefetch_multiplier)r^   Úmaxrº   r_   r   Úconsumer_clsrƒ   rŒ   r´   Úready_callbackrQ   r   rR   r8   Úoptionsr¹   Úconsumer)r#   r$   Úprefetch_countÚcs       r%   r&   zConsumer.createÜ   sÀ   € Ø×ÒÜ  ×!2Ñ!2°AÓ6¸×9NÑ9NÑN‰NàŸ]™]¨Q×-BÑ-BÑBˆNØ×)Ñ)Ø�N‰N˜AŸN™NØ—Z‘ZØŸ™Ø×*Ñ*Ø#1Ø—‘Ø—'‘'Ø—‘ØØ—‘ØŸ9™9Ø !× 5Ñ 5Ø !× 5Ñ 5ð *ó 
ð 	
ˆˆAŒJð ˆr'   N)r0   r1   r2   r3   Úlastr&   r4   r'   r%   r   r   ×   s   „ Ù3à€Dór'   r   )#r3   r®   r~   Úkombu.asynchronousr   rD   r   r   Úkombu.asynchronous.semaphorer   r   Úkombu.asynchronous.timerr   r   Úceleryr	   Úcelery._stater
   Úcelery.exceptionsr   Úcelery.platformsr   Úcelery.utils.logr   r*   Ú__all__r}   r¢   r�   ÚStepÚStartStopStepr   r   r   r   r4   r'   r%   Ú<module>rÎ      s´   ðÙ Û Û å *ß =ß GÝ 4å Ý 3Ý 2Ý 'Ý 4à
A€à˜8Ð$€ð€ð
€ô@ˆI�N‰Nô @ô0'"ˆ)×
!Ñ
!ô '"ôTM-ˆ9×"Ñ"ô M-ô`ˆ9×"Ñ"ô ô0
-ˆi�n‰nô 
-ôˆy×&Ñ&õ r'   