ó
ê™xTc           @   sû   d  d l  m Z d  d l Z d  d l Z d  d l Z d d d „  ƒ  YZ d d d „  ƒ  YZ e d k r÷ d  d l	 Z	 e ƒ  Z
 e d e
 d	 d
 g d d ƒZ e j ƒ  e j ƒ  GHx e j ƒ  rÍ e	 j d ƒ q± We j ƒ  Z e j d GHe e j ƒ GHn  d S(   iÿÿÿÿ(   t   divisionNt   Jobc           B   s2   e  Z g  d  d „ Z d „  Z d „  Z d „  Z RS(   t   pythonc         C   s1   | |  _  | |  _ t |  _ | |  _ | |  _ d S(   s‰   name must be unique, execObj must be pickle_able and have a run method
        pythonExec is the python command to use e.g. phenix.pythonN(   t   namet   execObjt   Falset	   submittedt
   pythonExect   modules(   t   selfR   R   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   __init__   s
    				c         C   sH  |  j  d |  _ |  j  d |  _ t |  j d ƒ } t j |  j | ƒ | j ƒ  |  j  d |  _ t |  j d ƒ } | d IJx |  j	 D] } | d | IJq… W| d |  j IJ| d	 IJ| d
 IJ| d IJ| d |  j IJ| d IJ| d
 IJ| j ƒ  d |  j
 |  j f } t j | d t j d t j d t ƒ|  _ t |  _ d  S(   Ns
   _input.pkls   _output.pklt   wbs   .pyt   ws   import pickles   from %s import *s   f=open("%s","rb")s   execObj=pickle.load(f)s	   f.close()s   result=execObj.run()s   f=open("%s","wb")s   pickle.dump(result,f)s   bsub -K %s %st   stdoutt   stderrt   shell(   R   t   pickleInputFileNamet   pickleOutputFileNamet   opent   picklet   dumpR   t   closet   scriptFileNameR   R   t
   subprocesst   Popent   PIPEt   Truet   processR   (   R	   t
   pickleFilet
   scriptFilet   mt   cmd(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   start   s0    







c         C   s   |  j  j ƒ  d  k S(   N(   R   t   pollt   None(   R	   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   isAlive-   s    c         C   s¥   |  j  ƒ  r t d ƒ ‚ n  t |  j d ƒ } t j | ƒ } | j ƒ  |  j j ƒ  d k rq t d |  j	 ƒ ‚ n  t
 j |  j ƒ t
 j |  j ƒ t
 j |  j ƒ | S(   Ns   Job not finishedt   rbi    s   process %s failed(   R#   t	   ExceptionR   R   R   t   loadR   R   R!   R   t   ost   removeR   R   (   R	   t   ft   result(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   get0   s    
(   t   __name__t
   __module__R
   R    R#   R+   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyR      s   			t   testObjc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d |  _  g  |  _ d  S(   Ni   (   t   dataR*   (   R	   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyR
   >   s    	c         C   sG   d d  l  } x4 t d ƒ D]& } |  j j | j | |  j ƒ ƒ q W|  S(   Niÿÿÿÿi'  (   t   matht   rangeR*   t   appendt   sinR/   (   R	   R0   t   i(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   runB   s    $(   R,   R-   R
   R5   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyR.   =   s   	t   __main__t   j1R   t   lsfR   s   phenix.pythoni
   i    (    (    (   t
   __future__R    t   cPickleR   R   R'   R   R.   R,   t   timet   ot   jR    R#   t   sleepR+   t   rR*   t   len(    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/queuing_system_utils/lsf.pyt   <module>   s    6	
