ó
ÐH/\c           @@  sÂ  d  Z  d d l m Z d d l Z d d d d d d	 d
 g Z d g Z e j d d k rh d d l Z n. d d l	 Z d Z
 e d d d d d d g 7Z e j Z d d l m Z d d l m Z d d l 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 „ Z d" d d „ Z d e f d „  ƒ  YZ e Z d „  Z  e! e d ƒ r|e j" Z# d d „ Z" n e j$ d ƒ e e e% ƒ  d  e d! e& ƒZ e e Z' e' j$ d
 ƒ d S(#   sK  
Implementation of the standard :mod:`thread` module that spawns greenlets.

.. note::

    This module is a helper for :mod:`gevent.monkey` and is not
    intended to be used directly. For spawning greenlets in your
    applications, prefer higher level constructs like
    :class:`gevent.Greenlet` class or :func:`gevent.spawn`.
i    (   t   absolute_importNt   allocate_lockt	   get_identt   exitt   LockTypet
   stack_sizet   start_new_threadt   _localt   errori   t   _threadt   RLockt   TIMEOUT_MAXt   allocatet   exit_threadt   interrupt_maint	   start_new(   t   PY3(   t   PYPY(   t   copy_globals(   t
   getcurrentt   GreenletExit(   t   Greenlet(   t   BoundedSemaphore(   t   localc         C@  s"   |  d  k r t ƒ  }  n  t |  ƒ S(   N(   t   NoneR   t   id(   t   gr(    (    s,   lib/python2.7/site-packages/gevent/thread.pyR   ,   s    c         C@  s@   | d  k	 r$ t j |  | | Ž } n t j |  | Œ } t | ƒ S(   N(   R   R   t   spawnR   (   t   functiont   argst   kwargst   greenlet(    (    s,   lib/python2.7/site-packages/gevent/thread.pyR   2   s    c           B@  sG   e  Z e j Z e r$ e r$ e Z n  e rE e j Z	 e
 d  d „ Z n  RS(   iÿÿÿÿc         C@  s’   | d k r d  } n  | r7 | d  k	 r7 t d ƒ ‚ n  | d  k	 r | d k  r^ t d ƒ ‚ n  | |  j k r t d ƒ ‚ q n  t j |  | | ƒ S(   Niÿÿÿÿs/   can't specify a timeout for a non-blocking calli    s'   timeout value must be strictly positives   timeout value is too large(   R   t
   ValueErrort   _TIMEOUT_MAXt   OverflowErrorR   t   acquire(   t   selft   blockingt   timeout(    (    s,   lib/python2.7/site-packages/gevent/thread.pyR#   E   s    	(   t   __name__t
   __module__t
   __thread__R   t   _OVER_RELEASE_ERRORR   R   t   RuntimeErrorR   R!   t   TrueR#   (    (    (    s,   lib/python2.7/site-packages/gevent/thread.pyR   :   s   			c           C@  s
   t  ‚ d  S(   N(   R   (    (    (    s,   lib/python2.7/site-packages/gevent/thread.pyR   Y   s    c         C@  s0   |  d  k r t ƒ  S|  t ƒ  k r, t |  ƒ Sd  S(   N(   R   t   _original_stack_size(   t   size(    (    s,   lib/python2.7/site-packages/gevent/thread.pyR   `   s    t
   only_namest   ignore_missing_names(    ((   t   __doc__t
   __future__R    t   syst   __implements__t   __imports__t   version_infot   threadR)   R	   t
   __target__R   t   gevent._compatR   R   t   gevent._utilR   t
   gevent.hubR   R   t   gevent.greenletR   t   gevent.lockR   t   gevent.localR   R   R   R   R   R   R   R   t   hasattrR   R-   t   removet   globalsR,   t   __all__(    (    (    s,   lib/python2.7/site-packages/gevent/thread.pyt   <module>
   sT   		
				
