U
    3g                     @   s`   d dl Z d dlZd dlZd dlZG dd dZe Zdd Zdd Zdd	 Zd
d Z	dd Z
dS )    Nc                   @   s   e Zd ZdS )_worker_StateN)__name__
__module____qualname__ r   r   8/tmp/pip-unpacked-wheel-8jfb_caj/pymupdf/_apply_pages.pyr      s   r   c                 C   s6   | t _|t _|t _|t _|t _d t _|r2||| d S N)_worker_statepathpagefnpagefn_argspagefn_kwargsstatsdocument)r
   initfninitfn_argsinitfn_kwargsr   r   r   r   r   r   r   _worker_init   s    r   c              	   C   s<   t   |  } | dkr8tdt d| dd| d d S )Ng?os.getpid()=z: Z2fzs: .)timepymupdflogosgetpid)tlabelr   r   r   _stats_write%   s    r   c                 C   s   t js2t jrt }tt jt _t jr2t|d t jr@t }t j|  }t jrZt|d t jrht }t j|ft j	t j
}t jrt|d |S )Nzpymupdf.Document()z#_worker_state.document[page_number]z_worker_state.pagefn())r	   r   r   r   r   Documentr
   r   r   r   r   )Zpage_numberr   pageretr   r   r   
_worker_fn+   s.    



r!   c
                 C   sJ   t |t| |||||||	f"}
|
t|}| W  5 Q R  S Q R X d S r   )multiprocessingZPoolr   Z	map_asyncr!   get)r
   pagesr   r   r   r   r   r   concurrencyr   poolresultr   r   r   _multiprocessingG   s         	r(   c
                    s  d
|d krt  }t  t   	
fdd}
d }t }z	r^t }t
|D ]}t }|dkrzNz
|
  W n> tk
r } z td	t d|  W 5 d }~X Y nX W 5 
rtd	t d
 td X || qf	rt	|d 	rt }
r*td t
t|D ]}| q6	rXt	|d d gt| }t
t|D ]h} \}}
rtd|dt| || d kstt|tr|s|} q|||< qrt
|D ]}d  q
rtd   |r|
r2tdt| |W S 	rHt }|D ]F}
rhtd|d t|d}
rLtd|d| qL	rt	|d X d S )Nr   c               
      s  d } 
r(t dt d d t 	 
rXt dt d  }
rt dt d|d |d krqz| s	rt }t } 	rt|d 	rt }| | }	rt|d 
rt dt d	t	 	rt }|ft	j
t	j}	r0t|d
|d W nH tk
rz } z(
rft dt d| |}W 5 d }~X Y nX 
rt dt d|d| ||f q>d S )Nr   z	: initfn=z initfn_args=z: calling get().z: page_num=r   zpymupdf.Document(path)zdocument[page_num]z: _worker_state=	page_num=z	 pagefn()z: exception e=z: sending page_num=z ret=)r   r   r   r   r   r#   r   r   r   r	   r   r   	Exceptionput)r   page_numr   r   r    er   r   r   r   r   r   r
   Z
queue_downZqueue_upr   verboser   r   childfn{   sh     


  z_fork.<locals>.childfnzwaiting for pid=r   zpid=z => e=zJoin all child procesesr   z: calling os._exit(0)z: childfn() => e=zcreate child processeszSending page numbers.zSend page numbersr)   z len(text)=zClosing queues.z%After concurrent, returning len(ret)=)r"   	cpu_countQueuelistr   r   r   r   waitpidr   rangeforkr   _exitr*   appendlenr+   r#   AssertionError
isinstanceclose)r
   r$   r   r   r   r   r   r   r%   r   r0   errorZpidsr   pidr-   ipr,   r    textr   r.   r   _forkb   s    	 8



 
rB   )r"   r   r   r   r   r	   r   r   r!   r(   rB   r   r   r   r   <module>   s   