Hacked By AnonymousFox
B
� ftm � @ s� d Z dZddlZddlZddlmZ ddlZddlmZ ddlZ ddl
mZ ddlm
Z
ddlZddlZddlmZ ddlZddlZddlZe�� Zd aG d
d� d�Zdd
� ZdZdZG dd� de�ZG dd� d�Zdd� ZG dd� de �Z!G dd� de �Z"G dd� de �Z#G dd� de
�Z$dd� Z%d d!� Z&d2d"d#�Z'd$d%� Z(d&d'� Z)d(d)� Z*d a+da,d*d+� Z-d,d-� Z.G d.d/� d/ej/�Z0G d0d1� d1ej1�Z2e�3e� dS )3a* Implements ProcessPoolExecutor.
The follow diagram and text describe the data-flow through the system:
|======================= In-process =====================|== Out-of-process ==|
+----------+ +----------+ +--------+ +-----------+ +---------+
| | => | Work Ids | | | | Call Q | | Process |
| | +----------+ | | +-----------+ | Pool |
| | | ... | | | | ... | +---------+
| | | 6 | => | | => | 5, call() | => | |
| | | 7 | | | | ... | | |
| Process | | ... | | Local | +-----------+ | Process |
| Pool | +----------+ | Worker | | #1..n |
| Executor | | Thread | | |
| | +----------- + | | +-----------+ | |
| | <=> | Work Items | <=> | | <= | Result Q | <= | |
| | +------------+ | | +-----------+ | |
| | | 6: call() | | | | ... | | |
| | | future | | | | 4, result | | |
| | | ... | | | | 3, except | | |
+----------+ +------------+ +--------+ +-----------+ +---------+
Executor.submit() called:
- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict
- adds the id of the _WorkItem to the "Work Ids" queue
Local worker thread:
- reads work ids from the "Work Ids" queue and looks up the corresponding
WorkItem from the "Work Items" dict: if the work item has been cancelled then
it is simply removed from the dict, otherwise it is repackaged as a
_CallItem and put in the "Call Q". New _CallItems are put in the "Call Q"
until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because
calls placed in the "Call Q" can no longer be cancelled with Future.cancel().
- reads _ResultItems from "Result Q", updates the future stored in the
"Work Items" dict and deletes the dict entry
Process #1..n:
- reads _CallItems from "Call Q", executes the calls, and puts the resulting
_ResultItems in "Result Q"
z"Brian Quinlan (brian@sweetapp.com)� N)�_base)�Full)�wait)�Queue)�partialFc @ s, e Zd Zdd� Zdd� Zdd� Zdd� Zd S )
�
_ThreadWakeupc C s t jdd�\| _| _d S )NF)Zduplex)�mpZPipe�_reader�_writer)�self� r �?/opt/alt/python37/lib64/python3.7/concurrent/futures/process.py�__init__R s z_ThreadWakeup.__init__c C s | j �� | j�� d S )N)r
�closer )r r r r
r U s
z_ThreadWakeup.closec C s | j �d� d S )N� )r
Z
send_bytes)r r r r
�wakeupY s z_ThreadWakeup.wakeupc C s x| j �� r| j �� qW d S )N)r ZpollZ
recv_bytes)r r r r
�clear\ s z_ThreadWakeup.clearN)�__name__�
__module__�__qualname__r r r r r r r r
r Q s r c C sH da tt�� �} x| D ]\}}|�� qW x| D ]\}}|�� q0W d S )NT)�_global_shutdown�list�_threads_wakeups�itemsr �join)r �_�
thread_wakeup�tr r r
�_python_exita s r � �= c @ s e Zd Zdd� Zdd� ZdS )�_RemoteTracebackc C s
|| _ d S )N)�tb)r r"