| Server IP : 217.160.0.135 / Your IP : 216.73.217.85 Web Server : Apache System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64 User : sws1074145052 ( 1074145052) PHP Version : 8.3.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /lib/python3/dist-packages/zmq/utils/__pycache__/ |
Upload File : |
�
mc�c � �@ � d Z ddlZddlmZmZmZ G d� d� � ZdS )zWin32 compatibility utilities.� N)�Any�Callable�Optionalc �R � e Zd ZdZd deeg ef ddfd�Zd� Zd� Z d� Z
dS )
�allow_interruptaD Utility for fixing CTRL-C events on Windows.
On Windows, the Python interpreter intercepts CTRL-C events in order to
translate them into ``KeyboardInterrupt`` exceptions. It (presumably)
does this by setting a flag in its "console control handler" and
checking it later at a convenient location in the interpreter.
However, when the Python interpreter is blocked waiting for the ZMQ
poll operation to complete, it must wait for ZMQ's ``select()``
operation to complete before translating the CTRL-C event into the
``KeyboardInterrupt`` exception.
The only way to fix this seems to be to add our own "console control
handler" and perform some application-defined operation that will
unblock the ZMQ polling operation in order to force ZMQ to pass control
back to the Python interpreter.
This context manager performs all that Windows-y stuff, providing you
with a hook that is called when a CTRL-C event is intercepted. This
hook allows you to unblock your ZMQ poll operation immediately, which
will then result in the expected ``KeyboardInterrupt`` exception.
Without this context manager, your ZMQ-based application will not
respond normally to CTRL-C events on Windows. If a CTRL-C event occurs
while blocked on ZMQ socket polling, the translation to a
``KeyboardInterrupt`` exception will be delayed until the I/O completes
and control returns to the Python interpreter (this may never happen if
you use an infinite timeout).
A no-op implementation is provided on non-Win32 systems to avoid the
application from having to conditionally use it.
Example usage:
.. sourcecode:: python
def stop_my_application():
# ...
with allow_interrupt(stop_my_application):
# main polling loop.
In a typical ZMQ application, you would use the "self pipe trick" to
send message to a ``PAIR`` socket in order to interrupt your blocking
socket polling operation.
In a Tornado event loop, you can use the ``IOLoop.stop`` method to
unblock your I/O loop.
N�action�returnc �T � t j dk rdS | � |� � dS )a Translate ``action`` into a CTRL-C handler.
``action`` is a callable that takes no arguments and returns no
value (returned value is ignored). It must *NEVER* raise an
exception.
If unspecified, a no-op will be used.
�ntN)�os�name�_init_action)�selfr s �1/usr/lib/python3/dist-packages/zmq/utils/win32.py�__init__zallow_interrupt.__init__? s. � � �7�d�?�?��F����&�!�!�!�!�!� c �� �� ddl m}m} ddlm}m} |� d� � } |||� � }|j x}| _ ||f|_ ||_
��d� ��| _ |�fd�� � } | | _ d S )Nr )�WINFUNCTYPE�windll)�BOOL�DWORD�kernel32c � � d S �N� r r r �<lambda>z.allow_interrupt._init_action.<locals>.<lambda>[ s � �T� r c �( �� | dk r
�� � dS )Nr r )�eventr s �r �handlez,allow_interrupt._init_action.<locals>.handle^ s �� ���z�z������ �1r )
�ctypesr r �ctypes.wintypesr r �LoadLibrary�SetConsoleCtrlHandler�_SetConsoleCtrlHandler�argtypes�restyper r )
r r r r r r r �PHANDLER_ROUTINEr# r s
` r r zallow_interrupt._init_actionL s� �� �.�.�.�.�.�.�.�.�/�/�/�/�/�/�/�/��%�%�j�1�1�� '�;�t�U�3�3��
�*� +���'�*:�D�)A��&�(,��%��>�!�\�F���� � � � � �
� � � ����r c � � t j dk rdS | � | j d� � }|dk rt � � �dS )z"Install the custom CTRL-C handler.r N� r �r r
r$ r �OSError)r �results r � __enter__zallow_interrupt.__enter__l �D � �
�7�d�?�?��F��,�,�T�[�!�<�<���Q�;�;� �)�)�O� �;r c � � t j dk rdS | � | j d� � }|dk rt � � �dS )z!Remove the custom CTRL-C handler.r Nr r* )r �argsr, s r �__exit__zallow_interrupt.__exit__v r. r r )�__name__�
__module__�__qualname__�__doc__r r r r r r- r1 r r r r r s� � � � � � �0� 0�d"� "�x���S��(9�:� "�d� "� "� "� "�� � �@� � �� � � � r r )r5 r �typingr r r r r r r �<module>r7 sp �� $� $�
� � � � *� *� *� *� *� *� *� *� *� *�r� r� r� r� r� r� r� r� r� rr