Ë
    —V.j<  ã                   óH  — d Z ddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZ ddlmZmZmZ dd	lmZ dd
lmZ dZdZd„ Zd„ Zd„ Zd„ Z G d„ d«      Z  G d„ de «      Z! ejD                  edddœ¬«      ejF                  ed„ «       «       «       Z$y)aØ  Start multiple worker instances from the command-line.

.. program:: celery multi

Examples
========

.. code-block:: console

    $ # Single worker with explicit name and events enabled.
    $ celery multi start Leslie -E

    $ # Pidfiles and logfiles are stored in the current directory
    $ # by default.  Use --pidfile and --logfile argument to change
    $ # this.  The abbreviation %n will be expanded to the current
    $ # node name.
    $ celery multi start Leslie -E --pidfile=/var/run/celery/%n.pid
                                   --logfile=/var/log/celery/%n%I.log


    $ # You need to add the same arguments when you restart,
    $ # as these aren't persisted anywhere.
    $ celery multi restart Leslie -E --pidfile=/var/run/celery/%n.pid
                                     --logfile=/var/log/celery/%n%I.log

    $ # To stop the node, you need to specify the same pidfile.
    $ celery multi stop Leslie --pidfile=/var/run/celery/%n.pid

    $ # 3 workers, with 3 processes each
    $ celery multi start 3 -c 3
    celery worker -n celery1@myhost -c 3
    celery worker -n celery2@myhost -c 3
    celery worker -n celery3@myhost -c 3

    $ # override name prefix when using range
    $ celery multi start 3 --range-prefix=worker -c 3
    celery worker -n worker1@myhost -c 3
    celery worker -n worker2@myhost -c 3
    celery worker -n worker3@myhost -c 3

    $ # start 3 named workers
    $ celery multi start image video data -c 3
    celery worker -n image@myhost -c 3
    celery worker -n video@myhost -c 3
    celery worker -n data@myhost -c 3

    $ # specify custom hostname
    $ celery multi start 2 --hostname=worker.example.com -c 3
    celery worker -n celery1@worker.example.com -c 3
    celery worker -n celery2@worker.example.com -c 3

    $ # specify fully qualified nodenames
    $ celery multi start foo@worker.example.com bar@worker.example.com -c 3

    $ # fully qualified nodenames but using the current hostname
    $ celery multi start foo@%h bar@%h

    $ # Advanced example starting 10 workers in the background:
    $ #   * Three of the workers processes the images and video queue
    $ #   * Two of the workers processes the data queue with loglevel DEBUG
    $ #   * the rest processes the default' queue.
    $ celery multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data
        -Q default -L:4,5 DEBUG

    $ # You can show the commands necessary to start the workers with
    $ # the 'show' command:
    $ celery multi show 10 -l INFO -Q:1-3 images,video -Q:4,5 data
        -Q default -L:4,5 DEBUG

    $ # Additional options are added to each celery worker's command,
    $ # but you can also modify the options for ranges of, or specific workers

    $ # 3 workers: Two with 3 processes, and one with 10 processes.
    $ celery multi start 3 -c 3 -c:1 10
    celery worker -n celery1@myhost -c 10
    celery worker -n celery2@myhost -c 3
    celery worker -n celery3@myhost -c 3

    $ # can also specify options for named workers
    $ celery multi start image video data -c 3 -c:image 10
    celery worker -n image@myhost -c 10
    celery worker -n video@myhost -c 3
    celery worker -n data@myhost -c 3

    $ # ranges and lists of workers in options is also allowed:
    $ # (-c:1-3 can also be written as -c:1,2,3)
    $ celery multi start 5 -c 3  -c:1-3 10
    celery worker -n celery1@myhost -c 10
    celery worker -n celery2@myhost -c 10
    celery worker -n celery3@myhost -c 10
    celery worker -n celery4@myhost -c 3
    celery worker -n celery5@myhost -c 3

    $ # lists also works with named workers
    $ celery multi start foo bar baz xuzzy -c 3 -c:foo,bar,baz 10
    celery worker -n foo@myhost -c 10
    celery worker -n bar@myhost -c 10
    celery worker -n baz@myhost -c 10
    celery worker -n xuzzy@myhost -c 3
é    N©Úwraps)Úcached_property)ÚVERSION_BANNER)ÚClusterÚMultiParserÚNamespacedOptionParser)ÚCeleryCommandÚhandle_preload_options)Ú
EX_FAILUREÚEX_OKÚsignals)Úterm)Ú	pluralize)Ú	MultiToolaÑ  usage: {prog_name} start <node1 node2 nodeN|range> [worker options]
       {prog_name} stop <n1 n2 nN|range> [-SIG (default: -TERM)]
       {prog_name} restart <n1 n2 nN|range> [-SIG] [worker options]
       {prog_name} kill <n1 n2 nN|range>

       {prog_name} show <n1 n2 nN|range> [worker options]
       {prog_name} get hostname <n1 n2 nN|range> [-qv] [worker options]
       {prog_name} names <n1 n2 nN|range>
       {prog_name} expand template <n1 n2 nN|range>
       {prog_name} help

additional options (must appear after command name):

    * --nosplash:   Don't display program info.
    * --quiet:      Don't show as much output.
    * --verbose:    Show more output.
    * --no-color:   Don't display colors.
c                  óx   — t        j                  t        «       j                  t         j                  «      «       y ©N)ÚsysÚexitr   Úexecute_from_commandlineÚargv© ó    úRC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/bin/multi.pyÚmainr   ‹   s   € Ü‡H�HŒY‹[×1Ñ1´#·(±(Ó;Õ<r   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                 ó<   •— | j                  «         ‰| g|¢­i |¤ŽS r   )Úsplash)ÚselfÚargsÚkwargsÚfuns      €r   Ú_innerzsplash.<locals>._inner‘   s!   ø€ à�‰ŒÙ�4Ð)˜$Ò) &Ñ)Ð)r   r   ©r"   r#   s   ` r   r   r   �   s    ø€ ä
ˆ3ƒZó*ó ð*ð €Mr   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                 ó6   •—  ‰| | j                  |«      fi |¤ŽS r   )Úcluster_from_argv)r   r   r!   r"   s      €r   r#   zusing_cluster.<locals>._innerš   s    ø€ á�4˜×/Ñ/°Ó5Ñ@¸Ñ@Ð@r   r   r$   s   ` r   Úusing_clusterr(   ˜   s    ø€ ä
ˆ3ƒZóAó ðAà€Mr   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                 ód   •— | j                  |«      \  }}| j                  |«      } ‰| ||fi |¤ŽS r   )Ú_cluster_from_argvÚ_find_sig_argument)r   r   r!   ÚpÚclusterÚsigr"   s         €r   r#   z%using_cluster_and_sig.<locals>._inner¢   s;   ø€ à×,Ñ,¨TÓ2‰
ˆˆ7Ø×%Ñ% aÓ(ˆÙ�4˜ #Ñ0¨Ñ0Ð0r   r   r$   s   ` r   Úusing_cluster_and_sigr0       s    ø€ ä
ˆ3ƒZó1ó ð1ð €Mr   c                   ó~   — e Zd ZdZdeiZdZ	 	 dd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zed„ «       Zd„ Zed„ «       Zy)Ú
TermLoggerzcelery multi v{version}Úversionr   c                 ó    — |xs t         j                  | _        |xs t         j                  | _        || _        || _        || _        || _        y r   )r   ÚstdoutÚstderrÚnosplashÚquietÚverboseÚno_color)r   r5   r6   r7   r8   r9   r:   r!   s           r   Úsetup_terminalzTermLogger.setup_terminal²   s@   € ð Ò*¤§
¡
ˆŒØÒ*¤§
¡
ˆŒØ ˆŒØˆŒ
ØˆŒØ ˆ�r   Nc                 ó6   — | j                  |||¬«       t        S )N)ÚnewlineÚfile)Úsayr   ©r   Úmr=   r>   s       r   ÚokzTermLogger.ok¼   s   € Ø�‰�˜G¨$ˆÔ/Üˆr   c                 óP   — t        ||xs | j                  |rd¬«       y d¬«       y )NÚ
Ú )r>   Úend)Úprintr5   r@   s       r   r?   zTermLogger.sayÀ   s   € Üˆa�dÒ)˜dŸk™k±w¨tÖGÀBÖGr   c                 óD   — | j                  |||xs | j                  «      S r   )r?   r6   r@   s       r   ÚcarpzTermLogger.carpÃ   s   € Ø�x‰x˜˜7 DÒ$7¨D¯K©KÓ8Ð8r   c                 óT   — |r| j                  |«       | j                  «        t        S r   )rI   Úusager   )r   Úmsgs     r   ÚerrorzTermLogger.errorÆ   s   € ÙØ�I‰I�cŒNØ�
‰
ŒÜÐr   c                 óD   — | j                   r| j                  ||¬«       y y ©N©r=   )r9   Únote©r   rL   r=   s      r   ÚinfozTermLogger.infoÌ   s   € Ø�<Š<Ø�I‰I�c 7ˆIÕ+ð r   c                 óV   — | j                   s| j                  t        |«      |¬«       y y rO   )r8   r?   ÚstrrR   s      r   rQ   zTermLogger.noteÐ   s"   € Ø�zŠzØ�H‰H”S˜“X wˆHÕ/ð r   c                 ób   — | j                  t        j                  | j                  ¬«      «       y )N)Ú	prog_name)r?   ÚUSAGEÚformatrW   ©r   s    r   rK   zTermLogger.usageÔ   s   € à�‰”—‘¨¯©�Ó7Õ8r   c           	      óº   — | j                   sO| j                  | j                  j                   | j                  j
                  di | j                  ¤Ž«      «       y y )Nr   )r7   rQ   ÚcoloredÚcyanÚsplash_textrY   Úsplash_contextrZ   s    r   r   zTermLogger.splashØ   sL   € Ø�}Š}Ø�I‰I�d—l‘l×'Ñ'Ø'�× Ñ ×'Ñ'Ñ>¨$×*=Ñ*=Ñ>ó@õ Að r   c                 óD   — t        j                  | j                   ¬«      S )N)Úenabled)r   r\   r:   rZ   s    r   r\   zTermLogger.coloredÝ   s   € ä�|‰|¨¯©Ð$5Ô6Ð6r   )FFFF)TNr   )T)Ú__name__Ú
__module__Ú__qualname__r^   r   r_   Úretcoder;   rB   r?   rI   rM   rS   rQ   r   rK   r   r\   r   r   r   r2   r2   ª   ss   „ à+€KØ Ð0€Nð €Gð =BØ %ó!óóHó9óó,ó0ð ñ9ó ð9òAð
 ñ7ó ñ7r   r2   c                   óÆ  — e Zd ZdZeZeZg d¢Z	 	 d*d„Zd+d„Z	d„ Z
d„ Zd„ Zeed	„ «       «       Zeed
„ «       «       Zeed„ «       «       ZeZeed„ «       «       Zed„ «       Zd„ Zed„ «       Zeed„ «       «       Zd„ Zd„ Zej8                  fd„Zd+d„Zd+d„Zd+d„Z d+d„Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d „ Z*d!„ Z+d"„ Z,d#„ Z-d$„ Z.d%„ Z/d&„ Z0e1d'„ «       Z2e1d(„ «       Z3e1d)„ «       Z4y),r   zThe ``celery multi`` program.))z
--nosplashr7   )z--quietr8   )z-qr8   )z	--verboser9   )z
--no-colorr:   Nc                 ó‚  — || _         || _         | j                  |xs ||fi |¤Ž | j                  | _        d| _        | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  dœ| _        y )Nzcelery multi)ÚstartÚshowÚstopÚstopwaitÚstop_verifyÚrestartÚkillÚnamesÚexpandÚgetÚhelp)ÚenvÚcmdr;   r5   ÚfhrW   rh   ri   rj   rk   rm   rn   ro   rp   rq   rr   Úcommands)r   rs   rt   ru   r5   r6   r!   s          r   Ú__init__zMultiTool.__init__ð   s•   € ð ˆŒØˆŒØˆ×Ñ˜FšL b¨&Ñ;°FÒ;Ø—+‘+ˆŒØ'ˆŒà—Z‘ZØ—I‘IØ—I‘IØŸ™ØŸ=™=Ø—|‘|Ø—I‘IØ—Z‘ZØ—k‘kØ—8‘8Ø—I‘Iñ
ˆ�r   c                 ó&  — | j                  |«      }|�|n| j                  | _        t        j                  j	                  |j                  d«      «      | _        | j                  |«      s| j                  «       S | j                  |d   |dd  «      S )Nr   é   )
Ú_handle_reserved_optionsrt   ÚosÚpathÚbasenameÚpoprW   Úvalidate_argumentsrM   Úcall_command)r   r   rt   s      r   r   z"MultiTool.execute_from_commandline  sx   € à×,Ñ,¨TÓ2ˆØ˜/‘3¨t¯x©xˆŒÜŸ™×)Ñ)¨$¯(©(°1«+Ó6ˆŒà×&Ñ& tÔ,Ø—:‘:“<Ðà× Ñ   a¡¨$¨q¨r¨(Ó3Ð3r   c                 ó    — |xr |d   d   dk7  S )Nr   Ú-r   ©r   r   s     r   r   zMultiTool.validate_arguments  s   € ØÒ)˜˜Q™ ™
 cÑ)Ð)r   c                 ó~   — 	  | j                   |   |Ž xs t        S # t        $ r | j                  d|› �«      cY S w xY w)NzInvalid command: )rv   r   ÚKeyErrorrM   )r   Úcommandr   s      r   r€   zMultiTool.call_command  sH   € ð	=Ø)�4—=‘= Ñ)¨4Ð0Ò9´EÐ9øÜò 	=Ø—:‘:Ð 1°'°Ð;Ó<Ò<ð	=ús   ‚ œ<»<c                 ó¶   — t        |«      }| j                  D ]>  \  }}||v sŒt        | |t        |j	                  |j                  |«      «      «      «       Œ@ |S r   )ÚlistÚreserved_optionsÚsetattrÚboolr~   Úindex)r   r   ÚargÚattrs       r   rz   z"MultiTool._handle_reserved_options  sO   € Ü�D‹zˆØ×.Ô.‰IˆC�Ø�dŠ{Ü˜˜d¤D¨¯©°$·*±*¸S³/Ó)BÓ$CÕDð /ð ˆr   c                 óh   — | j                  d«       t        t        |j                  «       «      «      S )Nz> Starting nodes...)rQ   ÚintÚanyrh   ©r   r.   s     r   rh   zMultiTool.start!  s'   € ð 	�	‰	Ð'Ô(Ü”3�w—}‘}“Ó'Ó(Ð(r   c                 ó*   —  |j                   dd|i|¤ŽS ©Nr/   r   )rj   ©r   r.   r/   r!   s       r   rj   zMultiTool.stop'  s   € ð ˆw�|‰|Ñ. Ð. vÑ.Ð.r   c                 ó*   —  |j                   dd|i|¤ŽS r”   )rk   r•   s       r   rk   zMultiTool.stopwait,  s   € ð  ˆw×ÑÑ2 CÐ2¨6Ñ2Ð2r   c           	      óN   — t        t         |j                  dd|i|¤Ž«      «      S r”   )r�   r‘   rm   r•   s       r   rm   zMultiTool.restart2  s'   € ô ”3��w—‘Ñ9¨3Ð9°&Ñ9Ó:Ó;Ð;r   c                 óR   — | j                  dj                  d„ |D «       «      «       y )NrD   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )Úname)Ú.0Úns     r   Ú	<genexpr>z"MultiTool.names.<locals>.<genexpr>9  s   è ø€ Ð3©7 a˜1Ÿ6�6©7ùs   ‚)r?   Újoinr’   s     r   ro   zMultiTool.names7  s   € à�‰�—‘Ñ3©7Ó3Ó3Õ4r   c                 óÂ   — 	 | j                  |«      j                  |«      }| j                  dj                  |j                  «      «      S # t
        $ r	 t        cY S w xY w)NÚ )r'   ÚfindrB   rž   r   r…   r   )r   Úwantedr   Únodes       r   rq   zMultiTool.get;  sW   € ð	0Ø×)Ñ)¨$Ó/×4Ñ4°VÓ<ˆDð —7‘7˜3Ÿ8™8 D§I¡IÓ.Ó/Ð/øô ò 	ÜÒð	ús   ‚ A ÁAÁAc                 óP   — | j                  dj                  d„ |D «       «      «      S )NrD   c              3   óR   K  — | ]  }d j                  |j                  «      –— Œ! y­w)r    N)rž   Úargv_with_executable©r›   r£   s     r   r�   z!MultiTool.show.<locals>.<genexpr>E  s'   è ø€ ð !
á�ð �H‰H�T×.Ñ.×/Ùùs   ‚%')rB   rž   r’   s     r   ri   zMultiTool.showC  s+   € à�w‰w�t—y‘yñ !
áó!
ó 
ó ð 	r   c                 ó"   — |j                  «       S r   )rn   r’   s     r   rn   zMultiTool.killJ  s   € ð �|‰|‹~Ðr   c                 ót   ‡— | j                  dj                  ˆfd„| j                  |«      D «       «      «      S )NrD   c              3   ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wr   )Úexpander)r›   r£   Útemplates     €r   r�   z#MultiTool.expand.<locals>.<genexpr>P  s"   øè ø€ ð !
á4�ð �M‰M˜(×#Ù4ùs   ƒ)rB   rž   r'   )r   r¬   r   s    ` r   rp   zMultiTool.expandO  s7   ø€ Ø�w‰w�t—y‘yó !
à×.Ñ.¨tÔ4ó!
ó 
ó ð 	r   c                 ó.   — | j                  t        «       y r   )r?   Ú__doc__rƒ   s     r   rr   zMultiTool.helpU  s   € Ø�‰”Õr   c                 óF  — |j                   t        |j                  «      d  }t        |«      D ]L  }t        |«      dk(  r|d   dk(  r	 t	        |d   «      c S |d   dk(  sŒ3	 t        j                  |dd  «      c S  |S # t
        $ r Y Œ2w xY w# t        t        f$ r Y Œqw xY w)Né   r   r‚   ry   )
r    ÚlenÚvaluesÚreversedr�   Ú
ValueErrorr   ÚsignumÚAttributeErrorÚ	TypeError)r   r-   Údefaultr    r�   s        r   r,   zMultiTool._find_sig_argumentX  sª   € Ø�v‰v”c˜!Ÿ(™(“m�nÐ%ˆÜ˜D–>ˆCÜ�3‹x˜1Š}  Q¡¨3¢ðÜ˜s 1™v›;Ò&ð �1‰v˜‹}ðÜ"Ÿ>™>¨#¨a¨b¨'Ó2Ò2ð "ð ˆøô "ò Ùðûô
 '¬	Ð2ò Ùðús$   ÁA?Á"BÁ?	BÂ
BÂB ÂB c                 óª   — |�|n| j                   }| j                  |«      }|j                  «        || j                  |¬«      j                  |«      fS ©N)rt   )rt   ÚOptionParserÚparser   )r   r   rt   r-   s       r   Ú_nodes_from_argvzMultiTool._nodes_from_argvg  sN   € Ø�_‰c¨$¯(©(ˆØ×Ñ˜dÓ#ˆØ	�‰Œ	Ø�$×"Ñ" sÐ"Ó+×1Ñ1°!Ó4Ð4Ð4r   c                 ó2   — | j                  ||¬«      \  }}|S rº   )r+   )r   r   rt   Ú_r.   s        r   r'   zMultiTool.cluster_from_argvm  s    € Ø×,Ñ,¨T°sÐ,Ó;‰
ˆˆ7Øˆr   c                 ój   — | j                  ||¬«      \  }}|| j                  t        |«      |¬«      fS rº   )r½   r   rˆ   )r   r   rt   r-   Únodess        r   r+   zMultiTool._cluster_from_argvq  s7   € Ø×(Ñ(¨°3Ð(Ó7‰ˆˆ5Ø�$—,‘,œt E›{°�,Ó4Ð4Ð4r   c                 ó¼  — t        |fi d|“d| j                  “d| j                  “d| j                  “d| j                  “d| j
                  “d| j                  “d| j                  “d	| j                  “d
| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d| j                  “d| j                   “ŽS )Nrt   rs   Úon_stopping_preambleÚon_send_signalÚon_still_waiting_forÚon_still_waiting_progressÚon_still_waiting_endÚon_node_startÚon_node_restartÚon_node_shutdown_okÚon_node_statusÚon_node_signal_deadÚon_node_signalÚon_node_downÚon_child_spawnÚon_child_signalledÚon_child_failure)r   rs   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   )r   rÁ   rt   s      r   r   zMultiTool.Clusteru  s  € ÜØò
áð
ð —’ð
ð "&×!:Ò!:ð	
ð
  ×.Ò.ð
ð "&×!:Ò!:ð
ð '+×&DÒ&Dð
ð "&×!:Ò!:ð
ð ×,Ò,ð
ð !×0Ò0ð
ð !%× 8Ò 8ð
ð  ×.Ò.ð
ð !%× 8Ò 8ð
ð  ×.Ò.ð
ð ×*Ò*ð
ð   ×.Ò.ð!
ð"  $×6Ò6ð#
ð$ "×2Ò2ð%
ð 	
r   c                 óX   — | j                  | j                  j                  d«      «       y )Nz> Stopping nodes...)rQ   r\   Úblue©r   rÁ   s     r   rÃ   zMultiTool.on_stopping_preamble‹  s   € Ø�	‰	�$—,‘,×#Ñ#Ð$9Ó:Õ;r   c                 óF   — | j                  dj                  ||«      «       y )Nz	> {0.name}: {1} -> {0.pid}©rQ   rY   ©r   r£   r/   s      r   rÄ   zMultiTool.on_send_signalŽ  s   € Ø�	‰	Ð0×7Ñ7¸¸cÓBÕCr   c                 óÚ   — t        |«      }|r^| j                  | j                  j                  dj	                  |t        |d«      dj                  d„ |D «       «      «      «      d¬«       y y )Nz> Waiting for {} {} -> {}...r£   z, c              3   óF   K  — | ]  }t        |j                  «      –— Œ y ­wr   )rU   Úpidr§   s     r   r�   z1MultiTool.on_still_waiting_for.<locals>.<genexpr>—  s   è ø€ Ð>¹°œc $§(¡(Ÿm¹ùs   ‚!FrP   )r±   rQ   r\   rÓ   rY   r   rž   )r   rÁ   Únum_lefts      r   rÅ   zMultiTool.on_still_waiting_for‘  sg   € Ü�u“:ˆÙØ�I‰I�d—l‘l×'Ñ'Ø.×5Ñ5Øœi¨°&Ó9Ø—I‘IÑ>¹Ó>Ó>ó@óð ð	 õ ð r   c                 ó*   — | j                  dd¬«       y )NÚ.FrP   ©rQ   rÔ   s     r   rÆ   z#MultiTool.on_still_waiting_progressš  s   € Ø�	‰	�#˜uˆ	Õ%r   c                 ó&   — | j                  d«       y )NrE   rÞ   rZ   s    r   rÇ   zMultiTool.on_still_waiting_end�  s   € Ø�	‰	�"�r   c                 óD   — | j                  dj                  |«      «       y )Nz4Could not signal {0.name} ({0.pid}): No such processrÖ   ©r   r£   s     r   rÌ   zMultiTool.on_node_signal_dead   s   € Ø�	‰	ØB×IÑIØóõ	r   c                 óF   — | j                  d|j                  › d�d¬«       y )Nz	> ú: FrP   )rQ   rš   rá   s     r   rÈ   zMultiTool.on_node_start¥  s   € Ø�	‰	�D˜Ÿ™˜ 2Ð&°ˆ	Õ6r   c                 óx   — | j                  | j                  j                  d|j                  › d�«      d¬«       y )Nz> Restarting node rã   FrP   )rQ   r\   rÓ   rš   rá   s     r   rÉ   zMultiTool.on_node_restart¨  s8   € Ø�	‰	�$—,‘,×#Ñ#Ø  §¡ ¨2Ð.ó0Ø9>ð 	õ 	@r   c                 óZ   — | j                  d|j                  › d| j                  › �«       y )Nz> rã   )rQ   rš   ÚDOWNrá   s     r   rÎ   zMultiTool.on_node_down¬  s#   € Ø�	‰	�B�t—y‘y�k  D§I¡I ;Ð/Õ0r   c                 óZ   — | j                  d|j                  › d| j                  › �«       y )Nz
	> rã   )rQ   rš   ÚOKrá   s     r   rÊ   zMultiTool.on_node_shutdown_ok¯  s#   € Ø�	‰	�F˜4Ÿ9™9˜+ R¨¯© yÐ1Õ2r   c                 ó^   — | j                  |xr | j                  xs | j                  «       y r   )rQ   ÚFAILEDrè   )r   r£   Úretvals      r   rË   zMultiTool.on_node_status²  s    € Ø�	‰	�&Ò(˜TŸ[™[Ò3¨D¯G©GÕ4r   c                 óH   — | j                  dj                  ||¬«      «       y )Nz(Sending {sig} to node {0.name} ({0.pid}))r/   rÖ   r×   s      r   rÍ   zMultiTool.on_node_signalµ  s'   € Ø�	‰	Ð<×CÑCØ�cð Dó õ 	r   c                 ó,   — | j                  d|› �«       y )Nz  )rS   )r   r£   Úargstrrs   s       r   rÏ   zMultiTool.on_child_spawn¹  s   € Ø�	‰	�B�v�h�-Õ r   c                 ó,   — | j                  d|› �«       y )Nz!* Child was terminated by signal rÞ   )r   r£   rµ   s      r   rÐ   zMultiTool.on_child_signalled¼  s   € Ø�	‰	Ð5°f°XÐ>Õ?r   c                 ó,   — | j                  d|› �«       y )Nz"* Child terminated with exit code rÞ   )r   r£   re   s      r   rÑ   zMultiTool.on_child_failure¿  s   € Ø�	‰	Ð6°w°iÐ@ÕAr   c                 óJ   — t        | j                  j                  d«      «      S )Nrè   )rU   r\   ÚgreenrZ   s    r   rè   zMultiTool.OKÂ  s   € ä�4—<‘<×%Ñ% dÓ+Ó,Ð,r   c                 óJ   — t        | j                  j                  d«      «      S )Nrê   )rU   r\   ÚredrZ   s    r   rê   zMultiTool.FAILEDÆ  s   € ä�4—<‘<×#Ñ# HÓ-Ó.Ð.r   c                 óJ   — t        | j                  j                  d«      «      S )Nræ   )rU   r\   ÚmagentarZ   s    r   ræ   zMultiTool.DOWNÊ  s   € ä�4—<‘<×'Ñ'¨Ó/Ó0Ð0r   )NNNNNr   )5rb   rc   rd   r®   r   r	   r»   r‰   rw   r   r   r€   rz   r   r(   rh   r0   rj   rk   rl   rm   ro   rq   ri   rn   rp   rr   ÚsignalÚSIGTERMr,   r½   r'   r+   r   rÃ   rÄ   rÅ   rÆ   rÇ   rÌ   rÈ   rÉ   rÎ   rÊ   rË   rÍ   rÏ   rÐ   rÑ   r   rè   rê   ræ   r   r   r   r   r   â   s«  „ Ù'à€KØ)€LòÐð &*Ø.2ó
ó,	4ò*ò=òð Øñ)ó ó ð)ð Øñ/ó ó ð/ð Øñ3ó ó ð3à€KàØñ<ó ó ð<ð ñ5ó ð5ò0ð ñó ðð Øñó ó ðòòð -3¯N©Nó ó5óó5ó
ò,<òDòò&òòò
7ò@ò1ò3ò5òò!ò@òBð ñ-ó ð-ð ñ/ó ð/ð ñ1ó ñ1r   r   T)Úallow_extra_argsÚignore_unknown_options)ÚclsÚcontext_settingsc                 ó  — t        | j                  j                  | j                  j                  ¬«      }t        j
                  dd }||j                  d«      d |d|j                  d«       z   }|j                  |«      S )z Start multiple worker instances.)r8   r:   ry   NÚmulti)r   Úobjr8   r:   r   r   rŒ   r   )Úctxr!   rt   r    s       r   rþ   rþ   Ï  sp   € ô ˜#Ÿ'™'Ÿ-™-°#·'±'×2BÑ2BÔ
C€Cô �8‰8�A�Bˆ<€DØ�—
‘
˜7Ó#Ð$Ð%¨Ð-A¨d¯j©j¸Ó.AÐ(BÑB€DØ×'Ñ'¨Ó-Ð-r   )%r®   r{   r÷   r   Ú	functoolsr   ÚclickÚkombu.utils.objectsr   Úceleryr   Úcelery.apps.multir   r   r	   Úcelery.bin.baser
   r   Úcelery.platformsr   r   r   Úcelery.utilsr   Úcelery.utils.textr   Ú__all__rX   r   r   r(   r0   r2   r   r†   Úpass_contextrþ   r   r   r   Ú<module>r     s·   ðñcóH 
Û Û 
Ý ã Ý /å !ß JÑ Jß Aß 7Ñ 7Ý Ý 'à
€ð	€ò*=òòò÷57ñ 57ôpj1�
ô j1ðZ €‡�Øà Ø"&ñôð ×ÑØñ.ó ó óñ.r   