a
    yh                     @   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   P/var/www/html/assistant/venv/lib/python3.9/site-packages/pymupdf/_apply_pages.pyr      s   r   c                 C   s:   | t _|t _|t _|t _|t _d t _|r6||i | 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 )N
   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|gt j	R i 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   sV   t |t| |||||||	f$}
|
t|}| W  d    S 1 sH0    Y  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 u rt  }t  t   	
fdd}
d }t }z؈	r^t }t|D ]}t }|dkrztz
|
  W n@ ty } z(t	
dt d|  W Y d }~n
d }~0 0 W 
rt	
dt d td n(
rt	
dt d td 0 || qf	r6t|d 	rDt }
rTt	
d tt|D ]}| q`	rt|d	 d gt| }tt|D ]h} \}}
rt	
d
|dt| || d u sJ t|tr|s|} q|||< qt|D ]}d  q
r0t	
d   |rB|
r\t	
dt| |W 	rnt }|D ]F}
rt	
d|d t|d}
rrt	
d|d| qr	rt|d S |D ]F}
rt	
d|d t|d}
rt	
d|d| qЈ	rt|d nl	r8t }|D ]F}
rXt	
d|d t|d}
r<t	
d|d| q<	rt|d 0 d S )Nr   c               
      s  d } 
r(t dt d d t 	 
rXt dt d  }
rt dt d|d |d u rqz| s	rt }t } 	rt|d 	rt }| | }	rt|d 
rt dt d	t	 	rt }|gt	j
R i t	j}	r6t|d
|d W nJ ty } z0
rjt dt d| |}W Y d }~n
d }~0 0 
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{   sf     


  z_fork.<locals>.childfnr   z: childfn() => e=z: calling os._exit(0)zcreate child processeszSending page numbers.zSend page numbersr*   z len(text)=zClosing queues.z%After concurrent, returning len(ret)=zwaiting for pid=r   zpid=z => e=zJoin all child proceses)r#   	cpu_countQueuelistr   ranger   forkr+   r   r   r   _exitappendr   lenr,   r$   
isinstanceclosewaitpid)r
   r%   r   r   r   r   r   r   r&   r   r1   errorZpidsr   ipr.   r-   r!   textpidr   r/   r   _forkb   s    	 8





  rB   )r#   r   r   r   r   r	   r   r   r"   r)   rB   r   r   r   r   <module>   s   