ó
ê™xTc           @   sÌ   d  d l  m Z d  d l Z d  d l Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionNt   Threadc           B   s   e  Z d  Z d „  Z RS(   sƒ   
  A Thread-specialization that adds the exitcode attribute

  http://stackoverflow.com/questions/986616/python-thread-exit-code
  c         C   sU   y t  t |  ƒ j ƒ  Wn% t k
 r> } d |  _ | |  _ n Xd |  _ d  |  _ d  S(   Ni   i    (   t   superR   t   runt	   Exceptiont   exitcodet   errt   None(   t   selft   e(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR      s    		(   t   __name__t
   __module__t   __doc__R   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR      s   t   Processc           B   s>   e  Z d  Z d d d e d i  d „ Z d „  Z d d „ Z RS(   s;   
  A Process-specialization that adds the .err attribute
  c         C   sJ   t  t |  ƒ j | | | | | ƒ | |  _ d d  l } | j ƒ  |  _ d  S(   Niÿÿÿÿ(   R   R   t   __init__t   display_stderrt   tempfilet   TemporaryFilet   stderr(   R   t   groupt   targett   nameR   t   argst   kwargsR   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   "   s    
"	c         C   sc   d d  l  } | j j ƒ  } |  j | _ d d  l } | j |  j j ƒ  | ƒ t t |  ƒ j ƒ  d  S(   Niÿÿÿÿ(   t   sysR   t   filenot   ost   dup2R   R   R   (   R   R   t   stderr_filenoR   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   3   s    c         C   s¾   t  t |  ƒ j | ƒ |  j s# d  S|  j j d ƒ |  j j ƒ  } |  j j ƒ  d  |  _ |  j r� d d  l	 } | j j
 | ƒ | j j
 d ƒ n  |  j d k r± t | ƒ |  _ n	 d  |  _ d  S(   Ni    iÿÿÿÿs   
(   R   R   t   joinR   t   seekt   readt   closeR   R   R   t   writeR   t   RuntimeErrorR   (   R   t   timeoutR   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   >   s    			N(    (   R
   R   R   R   t   FalseR   R   R   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR      s   
	t   ThreadFactoryc           B   s,   e  Z d  Z d e d „ Z d i  d „ Z RS(   s?   
  Creator for threading.Thread or scheduling_helpers.Thread
  c         K   s+   | r t  |  _ n t j  |  _ | |  _ d  S(   N(   R   t   factoryt	   threadingR   (   R   R   t   preserve_exception_messageR   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   [   s    c      	   C   s%   |  j  d |  j d | d | d | ƒ S(   NR   R   R   R   (   R&   R   (   R   R   R   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyt   __call__f   s
    		N(    (   R
   R   R   R   R$   R   R)   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR%   V   s   t   ProcessFactoryc           B   s,   e  Z d  Z d e d „ Z d i  d „ Z RS(   sG   
  Creator for multiprocessing.Process or scheduling_helpers.Process
  c         K   s+   | r t  |  _ n t j  |  _ | |  _ d  S(   N(   R   R&   t   multiprocessingR   (   R   R   R(   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   u   s    c      	   C   s%   |  j  d |  j d | d | d | ƒ S(   NR   R   R   R   (   R&   R   (   R   R   R   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR)   €   s
    		N(    (   R
   R   R   R   R$   R   R)   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR*   p   s   t	   QQFactoryc           B   s,   e  Z d  Z e d „  ƒ Z e d „  ƒ Z RS(   sb   
  Creator pattern for Queue.Queue, also include destruction

  Note this is a singleton object
  c          C   s   d d  l  }  |  j  ƒ  S(   Niÿÿÿÿ(   t   Queue(   R-   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyt   create‘   s    c         C   s   d  S(   N(    (   t   queue(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyt   destroy˜   s    (   R
   R   R   t   staticmethodR.   R0   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR,   Š   s   t
   MPQFactoryc           B   s,   e  Z d  Z e d „  ƒ Z e d „  ƒ Z RS(   sl   
  Creator pattern for multiprocessing.Queue, also include destruction

  Note this is a singleton object
  c           C   s
   t  j ƒ  S(   N(   R+   R-   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR.   ¥   s    c         C   s   d  S(   N(    (   R/   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR0   «   s    (   R
   R   R   R1   R.   R0   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR2   ž   s   t   MPManagerQFactoryc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sx   
  Creator pattern for multiprocessing.Manager.Queue, also include destruction

  Note this is a not singleton object
  c         C   s   t  j ƒ  |  _ d  S(   N(   R+   t   Managert   manager(   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR   ¸   s    c         C   s   |  j  j ƒ  S(   N(   R5   R-   (   R   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR.   ½   s    c         C   s   d  S(   N(    (   R   R/   (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR0   Â   s    (   R
   R   R   R   R.   R0   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyR3   ±   s   		(   t
   __future__R    R'   R+   R   R   t   objectR%   R*   R,   R2   R3   (    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/scheduling_helpers.pyt   <module>   s   9