B
    EDbZ                 @   s   d dl mZ d dlZd dlZd dlm  mZ d dlmZ d dl	m
Z
 yd dlZW n   d dlZY nX e adZefddZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd ZdddZG dd deZG dd deZdS )    )ProcessN)sha1)PORTABLE_STRINGi`T  c             C   s   |  |t|| d S )N)setcPickledumps)cachekeyvaltimeout r   =G:\easytimepro\master/mysite/ladon\tools\processmanagement.py	cache_set   s    r   c             C   s&   |  |}|d krd S t|  |S )N)getr   loads)r   r	   r
   r   r   r   	cache_get   s    
r   c             C   s   |  | d S )N)delete)r   r	   r   r   r   	cache_del   s    r   c              C   s.   t  } | tt dtt  |  S )Nzutf-8)r   updatestrtimeencodebytesproc_idZ	hexdigest)task_idr   r   r   next_task_id"   s     r   c             C   s   t | d|| d S )Nz{}_state)r   format)r   r   runningr   r   r   update_task_state)   s    r   c             C   s   t | d|S )Nz{}_state)r   r   )r   r   r   r   r   task_running-   s    r   c             C   s&   t | |d k	r"t| d||| d S )Nz{}_{})r   r   r   )r   r   r	   valuer   r   r   set_task_info1   s    r!   c             C   s   t | d||S )Nz{}_{})r   r   )r   r   r	   r   r   r   get_task_info6   s    r"   c             C   s@   |d kr*x2dD ]}t | d|| qW nt | d|| d S )N)stateresultprogressZ	exceptionstartstopz{}_{})r   r   )r   r   r	   Zkey_itemr   r   r   remove_task_info:   s    
r(   c               @   s>   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd Zd	S )MultiProcessTaskContextc             C   s   || _ t|d| _d S )Nzutf-8)cache_clientr   r   )selfr*   r   r   r   r   __init__D   s    z MultiProcessTaskContext.__init__c             C   s   t | j| j| d S )N)r   r*   r   )r+   r   r   r   r   r   H   s    z)MultiProcessTaskContext.update_task_statec             C   s   t | j| jS )N)r   r*   r   )r+   r   r   r   r   K   s    z$MultiProcessTaskContext.task_runningc             C   s   t | j| j|S )N)r"   r*   r   )r+   r	   r   r   r   r"   N   s    z%MultiProcessTaskContext.get_task_infoNc             C   s   t | j| j|S )N)r(   r*   r   )r+   r	   r   r   r   r(   Q   s    z(MultiProcessTaskContext.remove_task_infoc             C   s   t | j| j|| d S )N)r!   r*   r   )r+   r	   r
   r   r   r   r!   T   s    z%MultiProcessTaskContext.set_task_info)N)	__name__
__module____qualname__r,   r   r   r"   r(   r!   r   r   r   r   r)   B   s   
r)   c                   sL   e Zd Zdd Z fddZdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )ManagedProcessc             O   s   | j r| j |f|| d S )N)event_cb)r+   Z
identifierargskwr   r   r   
post_eventY   s    zManagedProcess.post_eventc                s2   t  | _t| dd sd | _|| _tt|   d S )Nr1   )r   r   getattrr1   r*   superr0   r,   )r+   r*   )	__class__r   r   r,   ]   s
    zManagedProcess.__init__c             C   s   t d S )N)NotImplementedError)r+   r   r   r   run_managedd   s    zManagedProcess.run_managedc          
   C   s   t | j| jd | d | dt  y|   W n8   t | j| jd td| j| j	t
 f  Y nX | dt  | d t | j| jd d S )NTg        r&   Fz:Thread ID: %s (%s) failed with the following exception:
%sr'   g      ?)r   r*   r   update_progressr!   r   r9   logwriter7   Zget_traceback)r+   r   r   r   rung   s    

zManagedProcess.runc             C   s8   t |tkrd S |dkrd}|dk r(d}| d| d S )N   r   r%   )typefloatr!   )r+   r%   r   r   r   r:   u   s    zManagedProcess.update_progressc             C   s   t | j| j|S )N)r"   r*   r   )r+   r	   r   r   r   r"   ~   s    zManagedProcess.get_task_infoc             C   s   t | j| j|| d S )N)r!   r*   r   )r+   r	   r
   r   r   r   r!      s    zManagedProcess.set_task_info)r-   r.   r/   r4   r,   r9   r=   r:   r"   r!   __classcell__r   r   )r7   r   r0   X   s   	r0   )N)Zmultiprocessingr   r   osZladon.tools.logZtoolsr;   Zhashlibr   Zmysite.ladon.compatr   r   _picklegetpidr   ZDEFAULT_TASK_TIMEOUTr   r   r   r   r   r   r!   r"   r(   objectr)   r0   r   r   r   r   <module>   s,   
