Current File : //snap/core22/current/usr/lib/python3.10/multiprocessing/__pycache__/shared_memory.cpython-310.pyc |
o
E�hH � @ s� d Z ddgZddlmZ ddlZddlZddlZddlZddlZddl Z ej
dkr0ddlZdZnddl
Z
dZd d
lmZ ejejB ZdZerIdZnd
Zdd� ZG dd� d�ZdZG dd� d�ZdS )z�Provides shared memory for direct access across processes.
The API of this package is currently provisional. Refer to the
documentation for details.
�SharedMemory�
ShareableList� )�partialN�ntFT� )�resource_tracker� z/psm_�wnsm_c C sB t tt� d } | dksJ d��tt�| � }t|�t ksJ �|S )z6Create a random filename for the shared memory object.� z_SHM_NAME_PREFIX too long)�_SHM_SAFE_NAME_LENGTH�len�_SHM_NAME_PREFIX�secrets� token_hex)�nbytes�name� r �4/usr/lib/python3.10/multiprocessing/shared_memory.py�_make_filename( s
r c @ s� e Zd ZdZdZdZdZdZej Z
dZerdndZ
ddd �Zd
d� Zdd
� Zdd� Zedd� �Zedd� �Zedd� �Zdd� Zdd� ZdS )r a� Creates a new shared memory block or attaches to an existing
shared memory block.
Every shared memory block is assigned a unique name. This enables
one process to create a shared memory block with a particular name
so that a different process can attach to that same shared memory
block using that same name.
As a resource for sharing data across processes, shared memory blocks
may outlive the original process that created them. When one process
no longer needs access to a shared memory block that might still be
needed by other processes, the close() method should be called.
When a shared memory block is no longer needed by any process, the
unlink() method should be called to ensure proper cleanup.N���i� TFr c C sx |dkst d��|rttjB | _|dkrt d��|d u r&| jtj@ s&t d��tr�|d u rL t� }z
tj || j| j
d�| _W n tyF Y q,w || _
n| jrSd| n|}tj || j| j
d�| _|| _
z|ro|rot�| j|� t�| j�}|j}t�| j|�| _W n ty� | �� � w t�| j
d� n�|r� |d u r�t� n|}t�tjtjtj|d ? d
@ |d
@ |�}z1t�� }|tjkr�|d ur�ttj t�!tj �|tj��W t�"|� q�tjd||d�| _W t�"|� nt�"|� w || _
n?|| _
t�#tj$d
|�}zt�%|tj$ddd�}W t�"|� nt�"|� w zt�&|�}W t�'|� nt�'|� w tjd||d�| _|| _(t)| j�| _*d S )Nr z!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=TrueT)�mode�/�
shared_memory� l �� r )�tagnameF)+�
ValueError�_O_CREX�os�O_RDWR�_flags�O_EXCL�
_USE_POSIXr �_posixshmem�shm_open�_mode�_fd�FileExistsError�_name�_prepend_leading_slash� ftruncate�fstat�st_size�mmap�_mmap�OSError�unlinkr �register�_winapi�CreateFileMapping�INVALID_HANDLE_VALUE�NULL�PAGE_READWRITE�GetLastError�ERROR_ALREADY_EXISTS�errno�EEXIST�strerror�CloseHandle�OpenFileMapping�
FILE_MAP_READ�
MapViewOfFile�VirtualQuerySize�UnmapViewOfFile�_size�
memoryview�_buf) �selfr �create�size�stats� temp_name�h_map�last_error_code�p_bufr r r �__init__K s� ����
�
����zSharedMemory.__init__c C s$ z| � � W d S ty Y d S w �N)�closer. �rD r r r �__del__� s
�zSharedMemory.__del__c C s | j | jd| jffS )NF)� __class__r rF rO r r r �
__reduce__� s ��zSharedMemory.__reduce__c C s | j j� d| j�d| j� d�S )N�(z, size=�))rQ �__name__r rF rO r r r �__repr__� s zSharedMemory.__repr__c C � | j S )z4A memoryview of contents of the shared memory block.)rC rO r r r �buf� � zSharedMemory.bufc C s. | j }tr| jr| j �d�r| j dd� }|S )z4Unique name that identifies the shared memory block.r r N)r'