
    ԋg                    j    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y)    )annotationsN)Literal)parse_timedelta)WorkerPluginc                  <    e Zd ZdZ	 	 d	 	 	 d	dZd Zd Zd Zd Zy)

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
    c                V    t        |      | _        |dvrt        d|      || _        y )N)sys.exitgracefulsegfaultzCThree modes supported, 'sys.exit', 'graceful', and 'segfault'. got )r   delay
ValueErrormode)selfr   r   s      1lib/python3.12/site-packages/distributed/chaos.py__init__zKillWorker.__init__   s>    
 %U+
;;h   	    c                b  K   || _         | j                  dk(  r| j                  }n7| j                  dk(  r| j                  }n| j                  dk(  r| j                  }| j                   j
                  j                  j                  t        j                  d| j                  z               y w)Nr   r
   r      )r   callback)workerr   r   sys_exitr   loopasyncio_loop
call_laterrandomexpovariater   )r   r   fs      r   setupzKillWorker.setup,   s     99
"AYY*$AYY*$A%%00$$Q^4 	1 	
s   B-B/c                d    t        j                  | j                  j                  dd             y )NF)nannyexecutor_wait)asynciocreate_taskr   closer   s    r   r   zKillWorker.graceful:   s$    DKK--E-OPr   c                .    t        j                  d       y )Nr   )sysexitr&   s    r   r   zKillWorker.sys_exit=   s    r   c                .    t        j                  d       y)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)z100 sr
   )r   zstr | int | floatr   z+Literal['sys.exit', 'graceful', 'segfault'])	__name__
__module____qualname____doc__r   r   r   r   r    r   r   r   r      s;    $ $+<F  :
Qr   r   )
__future__r   r#   r+   r   r(   typingr   
dask.utilsr   distributed.diagnostics.pluginr   r   r1   r   r   <module>r6      s)    "    
  & 76 6r   