
    0Fie                    r    d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ  G d de          ZdS )    )annotationsN)Literal)parse_timedelta)WorkerPluginc                  8    e Zd ZdZ	 	 dddZd	 Zd
 Zd Zd ZdS )
KillWorkera  Kill Workers Randomly

    This kills workers in a cluster randomly.  It is intended to be used in
    stress testing.

    Parameters
    ----------
    delay: str
        The expected amount of time for a worker to live.
        The actual time will vary, treating worker death as a poisson process.
    mode: str
        or "graceful" which calls worker.close(...)
        Either "sys.exit" which calls sys.exit(0)
        or "segfault" which triggers a segfault
    100 ssys.exitdelaystr | int | floatmode+Literal['sys.exit', 'graceful', 'segfault']c                h    t          |          | _        |dvrt          d|          || _        d S )N)r
   gracefulsegfaultzCThree modes supported, 'sys.exit', 'graceful', and 'segfault'. got )r   r   
ValueErrorr   )selfr   r   s      1lib/python3.11/site-packages/distributed/chaos.py__init__zKillWorker.__init__   sP    
 %U++
;;;       			    c                  K   || _         | j        dk    r| j        }n%| j        dk    r| j        }n| j        dk    r| j        }| j         j        j                            t          j	        d| j
        z            |           d S )Nr   r
   r      )r   callback)workerr   r   sys_exitr   loopasyncio_loop
call_laterrandomexpovariater   )r   r   fs      r   setupzKillWorker.setup,   s      9
""AAY*$$AAY*$$A%00$Q^44 	1 	
 	
 	
 	
 	
r   c                b    t          j        | j                            dd                     d S )NF)nannyexecutor_wait)asynciocreate_taskr   closer   s    r   r   zKillWorker.graceful:   s.    DK--E-OOPPPPPr   c                .    t          j        d           d S )Nr   )sysexitr)   s    r   r   zKillWorker.sys_exit=   s    r   c                .    t          j        d           dS )z
        Magic, from https://gist.github.com/coolreader18/6dbe0be2ae2192e90e1a809f1624c694?permalink_comment_id=3874116#gistcomment-3874116
        r   N)ctypes	string_atr)   s    r   r   zKillWorker.segfault@   s     	r   N)r	   r
   )r   r   r   r   )	__name__
__module____qualname____doc__r   r"   r   r   r    r   r   r   r      s~         $ $+<F    
 
 
Q Q Q      r   r   )
__future__r   r&   r.   r   r+   typingr   
dask.utilsr   distributed.diagnostics.pluginr   r   r4   r   r   <module>r9      s    " " " " " "    



       & & & & & & 7 7 7 7 7 76 6 6 6 6 6 6 6 6 6r   