|
Server : LiteSpeed System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64 User : nandedex ( 1060) PHP Version : 8.1.33 Disable Function : NONE Directory : /opt/cppython/lib/python3.8/concurrent/futures/__pycache__/ |
U
?��gzn � @ s� d Z dZddlZddlZddlmZ ddlZddlmZ ddlZ ddl
ZddlmZ ddl
Z
ddlZddlmZ ddlZddlZddlZe�� ZdaG d d
� d
�Zdd� Zd
ZdZG dd� de�ZG dd� d�Zdd� ZG dd� de�Z G dd� de�Z!G dd� de�Z"G dd� de�Z#dd� Z$dd � Z%d1d!d"�Z&d#d$� Z'd%d&� Z(d'd(� Z)da*da+d)d*� Z,d+d,� Z-G d-d.� d.ej.�Z/G d/d0� d0ej0�Z1e�2e� dS )2a- Implements ProcessPoolExecutor.
The following 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)�Queue)�partialFc @ s, e Zd Zdd� Zdd� Zdd� Zdd� Zd S )
�
_ThreadWakeupc C s t jdd�\| _| _d S )NF)�duplex)�mp�Pipe�_reader�_writer��self� r �9/opt/cppython/lib/python3.8/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 �
send_bytesr r r r �wakeupY s z_ThreadWakeup.wakeupc C s | j �� r| j �� q d S r )r
�poll�
recv_bytesr 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 s@ da tt�� �} | D ]\}}|�� q| D ]\}}|�� q*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 r ��tb)r
r* r r r r z s z_RemoteTraceback.__init__c C s | j S r r) r r r r �__str__| s z_RemoteTraceback.__str__N)r r r r r+ r r r r r( y s r( c @ s e Zd Zdd� Zdd� ZdS )�_ExceptionWithTracebackc C s0 t �t|�||�}d�|�}|| _d| | _d S )N� z
"""
%s""")� traceback�format_exception�typer! �excr* )r
r1 r* r r r r � s
z _ExceptionWithTraceback.__init__c C s t | j| jffS r )�_rebuild_excr1 r* r r r r �
__reduce__� s z"_ExceptionWithTraceback.__reduce__N)r r r r r3 r r r r r, s r, c C s t |�| _| S r )r( � __cause__)r1 r* r r r r2 � s
r2 c @ s e Zd Zdd� ZdS )� _WorkItemc C s || _ || _|| _|| _d S r )�future�fn�args�kwargs)r
r6 r7 r8 r9 r r r r � s z_WorkItem.__init__N�r r r r r r r r r5 � s r5 c @ s e Zd Zddd�ZdS )�_ResultItemNc C s || _ || _|| _d S r )�work_id� exception�result)r
r<