Current File : //proc/thread-self/root/usr/lib/python3.12/asyncio/__pycache__/events.cpython-312.pyc
�

�4h�r���dZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
Gd�d�ZGd�d	e�ZGd
�d�Z
Gd�d
�ZGd�d�ZGd�de�Zdaej$�ZGd�dej(�Ze�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!eZ"eZ#eZ$eZ%	ddl&mZmZmZmZeZ'eZ(eZ)eZ*e,ed �rd!�Z-ej\e-�"�yy#e+$rY�(wxYw)#z!Event loop and event loop policy.)�AbstractEventLoopPolicy�AbstractEventLoop�AbstractServer�Handle�TimerHandle�get_event_loop_policy�set_event_loop_policy�get_event_loop�set_event_loop�new_event_loop�get_child_watcher�set_child_watcher�_set_running_loop�get_running_loop�_get_running_loop�N�)�format_helpersc�@�eZdZdZdZdd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zy)rz1Object returned by callback registration methods.)�	_callback�_args�
_cancelled�_loop�_source_traceback�_repr�__weakref__�_contextNc�"�|�tj�}||_||_||_||_d|_d|_|jj�r.tjtjd��|_
yd|_
y)NFr)�contextvars�copy_contextrrrrrr�	get_debugr�
extract_stack�sys�	_getframer)�self�callback�args�loop�contexts     �%/usr/lib/python3.12/asyncio/events.py�__init__zHandle.__init__$sx���?�!�.�.�0�G���
���
�!�����
������
��:�:���!�%3�%A�%A��
�
�a� �&"�D�"�&*�D�"�c�h�|jjg}|jr|jd�|j�9|jtj|j|j��|jr,|jd}|jd|d�d|d���|S)N�	cancelled���zcreated at r�:r)	�	__class__�__name__r�appendrr�_format_callback_sourcerr)r$�info�frames   r)�
_repr_infozHandle._repr_info3s������'�'�(���?�?��K�K��$��>�>�%��K�K��>�>�����
�
�,�
-��!�!��*�*�2�.�E��K�K�+�e�A�h�Z�q��q��
�;�<��r+c��|j�|jS|j�}djdj|��S)Nz<{}>� )rr6�format�join)r$r4s  r)�__repr__zHandle.__repr__?s9���:�:�!��:�:����� ���}�}�S�X�X�d�^�,�,r+c��|jS�N)r�r$s r)�get_contextzHandle.get_contextEs���}�}�r+c��|js@d|_|jj�rt|�|_d|_d|_yy)NT)rrr �reprrrrr>s r)�cancelz
Handle.cancelHs@�����"�D�O��z�z�#�#�%�"�$�Z��
�!�D�N��D�J�r+c��|jSr=)rr>s r)r-zHandle.cancelledSs�����r+c��	|jj|jg|j���d}y#tt
f$r�t$rw}tj|j|j�}d|��}|||d�}|jr|j|d<|jj|�Yd}~d}yd}~wwxYw)NzException in callback )�message�	exception�handle�source_traceback)r�runrr�
SystemExit�KeyboardInterrupt�
BaseExceptionrr3rr�call_exception_handler)r$�exc�cb�msgr(s     r)�_runzHandle._runVs���	7��D�M�M���d�n�n�:�t�z�z�:�����-�.�	���	7��7�7�����
�
�,�B�*�2�$�/�C�� ���G�
�%�%�.2�.D�.D��*�+��J�J�-�-�g�6�6����	7�s�16�C�A+C�Cr=)r1�
__module__�__qualname__�__doc__�	__slots__r*r6r;r?rBr-rQ�r+r)rrs/��;��I�
*�
�-��	��r+rc�j��eZdZdZddgZd�fd�	Z�fd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Z�fd�Z
d
�Z�xZS)rz7Object returned by timed callback registration methods.�
_scheduled�_whenc�x��t�|�||||�|jr
|jd=||_d|_y)Nr.F)�superr*rrYrX)r$�whenr%r&r'r(r0s      �r)r*zTimerHandle.__init__os;���
����4��w�7��!�!��&�&�r�*���
���r+c���t�|��}|jrdnd}|j|d|j���|S)N�rzwhen=)r[r6r�insertrY)r$r4�posr0s   �r)r6zTimerHandle._repr_infovs;����w�!�#���?�?�a������C�5�����-�.��r+c�,�t|j�Sr=)�hashrYr>s r)�__hash__zTimerHandle.__hash__|s���D�J�J��r+c�`�t|t�r|j|jkStSr=��
isinstancerrY�NotImplemented�r$�others  r)�__lt__zTimerHandle.__lt__�%���e�[�)��:�:����+�+��r+c��t|t�r,|j|jkxs|j|�StSr=�rfrrY�__eq__rgrhs  r)�__le__zTimerHandle.__le__��3���e�[�)��:�:����+�A�t�{�{�5�/A�A��r+c�`�t|t�r|j|jkDStSr=rerhs  r)�__gt__zTimerHandle.__gt__�rkr+c��t|t�r,|j|jkDxs|j|�StSr=rmrhs  r)�__ge__zTimerHandle.__ge__�rpr+c��t|t�rj|j|jk(xrO|j|jk(xr4|j|jk(xr|j
|j
k(StSr=)rfrrYrrrrgrhs  r)rnzTimerHandle.__eq__�sl���e�[�)��J�J�%�+�+�-�8��N�N�e�o�o�5�8��J�J�%�+�+�-�8��O�O�u�'7�'7�7�
9��r+c�p��|js|jj|�t�|��yr=)rr�_timer_handle_cancelledr[rB)r$r0s �r)rBzTimerHandle.cancel�s&�������J�J�.�.�t�4�
���r+c��|jS)z�Return a scheduled callback time.

        The time is an absolute timestamp, using the same time
        reference as loop.time().
        )rYr>s r)r\zTimerHandle.when�s���z�z�r+r=)r1rRrSrTrUr*r6rcrjrorrrtrnrBr\�
__classcell__)r0s@r)rrjsB���A��w�'�I� �� ��
�
�
�
��
r+rc�@�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)rz,Abstract server returned by create_server().c��t�)z5Stop serving.  This leaves existing connections open.��NotImplementedErrorr>s r)�closezAbstractServer.close����!�!r+c��t�)z4Get the event loop the Server object is attached to.r|r>s r)�get_loopzAbstractServer.get_loop�rr+c��t�)z3Return True if the server is accepting connections.r|r>s r)�
is_servingzAbstractServer.is_serving�rr+c��K�t��w)z�Start accepting connections.

        This method is idempotent, so it can be called when
        the server is already being serving.
        r|r>s r)�
start_servingzAbstractServer.start_serving������"�!���	c��K�t��w)z�Start accepting connections until the coroutine is cancelled.

        The server is closed when the coroutine is cancelled.
        r|r>s r)�
serve_foreverzAbstractServer.serve_forever������
"�!�r�c��K�t��w)z*Coroutine to wait until service is closed.r|r>s r)�wait_closedzAbstractServer.wait_closed������!�!�r�c��K�|S�wr=rVr>s r)�
__aenter__zAbstractServer.__aenter__�s������s�c��`K�|j�|j��d{���y7��wr=)r~r�)r$rNs  r)�	__aexit__zAbstractServer.__aexit__�s!�����
�
����� � � �s�$.�,�.N)r1rRrSrTr~r�r�r�r�r�r�r�rVr+r)rr�s-��6�"�"�"�"�"�"��!r+rc
���eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zdd�d
�Z
dd�d�Zdd�d�Zd�Zd�Zddd�d�Zdd�d�Zd�Zd�Zddddd�d�ZdJd�Z	dKdddddddddddd�d�Z	dKej4ej6ddddddddd�
d �ZdLdd!�d"�Zd#dddd$�d%�Z	dMdddddd&�d'�Z	dMddddddd(�d)�Z dddd*�d+�Z!	dKdddddddd,�d-�Z"d.�Z#d/�Z$e%jLe%jLe%jLd0�d1�Z'e%jLe%jLe%jLd0�d2�Z(d3�Z)d4�Z*d5�Z+d6�Z,d7�Z-d8�Z.d9�Z/dJd:�Z0d;�Z1d<�Z2d=�Z3d>�Z4dLdd!�d?�Z5d@�Z6dA�Z7dB�Z8dC�Z9dD�Z:dE�Z;dF�Z<dG�Z=dH�Z>dI�Z?y)NrzAbstract event loop.c��t�)z*Run the event loop until stop() is called.r|r>s r)�run_foreverzAbstractEventLoop.run_forever�rr+c��t�)zpRun the event loop until a Future is done.

        Return the Future's result, or raise its exception.
        r|)r$�futures  r)�run_until_completez$AbstractEventLoop.run_until_complete�s
��
"�!r+c��t�)z�Stop the event loop as soon as reasonable.

        Exactly how soon that is may depend on the implementation, but
        no more I/O callbacks should be scheduled.
        r|r>s r)�stopzAbstractEventLoop.stop�s
��"�!r+c��t�)z3Return whether the event loop is currently running.r|r>s r)�
is_runningzAbstractEventLoop.is_running�rr+c��t�)z*Returns True if the event loop was closed.r|r>s r)�	is_closedzAbstractEventLoop.is_closed�rr+c��t�)z�Close the loop.

        The loop should not be running.

        This is idempotent and irreversible.

        No other methods should be called after this one.
        r|r>s r)r~zAbstractEventLoop.close�s
��"�!r+c��K�t��w)z,Shutdown all active asynchronous generators.r|r>s r)�shutdown_asyncgensz$AbstractEventLoop.shutdown_asyncgens�r�r�c��K�t��w)z.Schedule the shutdown of the default executor.r|r>s r)�shutdown_default_executorz+AbstractEventLoop.shutdown_default_executorr�r�c��t�)z3Notification that a TimerHandle has been cancelled.r|)r$rGs  r)rwz)AbstractEventLoop._timer_handle_cancelledrr+N)r(c�0�|jd|g|��d|i�S)Nrr()�
call_later�r$r%r(r&s    r)�	call_soonzAbstractEventLoop.call_soons���t���q�(�C�T�C�7�C�Cr+c��t�r=r|)r$�delayr%r(r&s     r)r�zAbstractEventLoop.call_later���!�!r+c��t�r=r|)r$r\r%r(r&s     r)�call_atzAbstractEventLoop.call_atr�r+c��t�r=r|r>s r)�timezAbstractEventLoop.timer�r+c��t�r=r|r>s r)�
create_futurezAbstractEventLoop.create_futurer�r+)�namer(c��t�r=r|)r$�coror�r(s    r)�create_taskzAbstractEventLoop.create_taskr�r+c��t�r=r|r�s    r)�call_soon_threadsafez&AbstractEventLoop.call_soon_threadsafe"r�r+c��t�r=r|)r$�executor�funcr&s    r)�run_in_executorz!AbstractEventLoop.run_in_executor%r�r+c��t�r=r|)r$r�s  r)�set_default_executorz&AbstractEventLoop.set_default_executor(r�r+r)�family�type�proto�flagsc��K�t��wr=r|)r$�host�portr�r�r�r�s       r)�getaddrinfozAbstractEventLoop.getaddrinfo-r�r�c��K�t��wr=r|)r$�sockaddrr�s   r)�getnameinfozAbstractEventLoop.getnameinfo1�����!�!�r�)�sslr�r�r��sock�
local_addr�server_hostname�ssl_handshake_timeout�ssl_shutdown_timeout�happy_eyeballs_delay�
interleavec��K�t��wr=r|)r$�protocol_factoryr�r�r�r�r�r�r�r�r�r�r�r�r�s               r)�create_connectionz#AbstractEventLoop.create_connection4s����"�!�r��dT)
r�r�r��backlogr��
reuse_address�
reuse_portr�r�r�c
��K�t��w)a#A coroutine which creates a TCP server bound to host and port.

        The return value is a Server object which can be used to stop
        the service.

        If host is an empty string or None all interfaces are assumed
        and a list of multiple sockets will be returned (most likely
        one for IPv4 and another one for IPv6). The host parameter can also be
        a sequence (e.g. list) of hosts to bind to.

        family can be set to either AF_INET or AF_INET6 to force the
        socket to use IPv4 or IPv6. If not set it will be determined
        from host (defaults to AF_UNSPEC).

        flags is a bitmask for getaddrinfo().

        sock can optionally be specified in order to use a preexisting
        socket object.

        backlog is the maximum number of queued connections passed to
        listen() (defaults to 100).

        ssl can be set to an SSLContext to enable SSL over the
        accepted connections.

        reuse_address tells the kernel to reuse a local socket in
        TIME_WAIT state, without waiting for its natural timeout to
        expire. If not specified will automatically be set to True on
        UNIX.

        reuse_port tells the kernel to allow this endpoint to be bound to
        the same port as other existing endpoints are bound to, so long as
        they all set this flag when being created. This option is not
        supported on Windows.

        ssl_handshake_timeout is the time in seconds that an SSL server
        will wait for completion of the SSL handshake before aborting the
        connection. Default is 60s.

        ssl_shutdown_timeout is the time in seconds that an SSL server
        will wait for completion of the SSL shutdown procedure
        before aborting the connection. Default is 30s.

        start_serving set to True (default) causes the created server
        to start accepting connections immediately.  When set to False,
        the user should await Server.start_serving() or Server.serve_forever()
        to make the server to start accepting connections.
        r|)r$r�r�r�r�r�r�r�r�r�r�r�r�r�s              r)�
create_serverzAbstractEventLoop.create_server>s����p"�!�r�)�fallbackc��K�t��w)zRSend a file through a transport.

        Return an amount of sent bytes.
        r|)r$�	transport�file�offset�countr�s      r)�sendfilezAbstractEventLoop.sendfilexr�r�F)�server_sider�r�r�c��K�t��w)z|Upgrade a transport to TLS.

        Return a new transport that *protocol* should start using
        immediately.
        r|)r$r��protocol�
sslcontextr�r�r�r�s        r)�	start_tlszAbstractEventLoop.start_tls�s����"�!�r�)r�r�r�r�r�c��K�t��wr=r|)r$r��pathr�r�r�r�r�s        r)�create_unix_connectionz(AbstractEventLoop.create_unix_connection�r�r�)r�r�r�r�r�r�c��K�t��w)aWA coroutine which creates a UNIX Domain Socket server.

        The return value is a Server object, which can be used to stop
        the service.

        path is a str, representing a file system path to bind the
        server socket to.

        sock can optionally be specified in order to use a preexisting
        socket object.

        backlog is the maximum number of queued connections passed to
        listen() (defaults to 100).

        ssl can be set to an SSLContext to enable SSL over the
        accepted connections.

        ssl_handshake_timeout is the time in seconds that an SSL server
        will wait for the SSL handshake to complete (defaults to 60s).

        ssl_shutdown_timeout is the time in seconds that an SSL server
        will wait for the SSL shutdown to finish (defaults to 30s).

        start_serving set to True (default) causes the created server
        to start accepting connections immediately.  When set to False,
        the user should await Server.start_serving() or Server.serve_forever()
        to make the server to start accepting connections.
        r|)	r$r�r�r�r�r�r�r�r�s	         r)�create_unix_serverz$AbstractEventLoop.create_unix_server�s����D"�!�r�)r�r�r�c��K�t��w)aHandle an accepted connection.

        This is used by servers that accept connections outside of
        asyncio, but use asyncio to handle connections.

        This method is a coroutine.  When completed, the coroutine
        returns a (transport, protocol) pair.
        r|)r$r�r�r�r�r�s      r)�connect_accepted_socketz)AbstractEventLoop.connect_accepted_socket�s����"�!�r�)r�r�r�r�r��allow_broadcastr�c��K�t��w)a�A coroutine which creates a datagram endpoint.

        This method will try to establish the endpoint in the background.
        When successful, the coroutine returns a (transport, protocol) pair.

        protocol_factory must be a callable returning a protocol instance.

        socket family AF_INET, socket.AF_INET6 or socket.AF_UNIX depending on
        host (or family if specified), socket type SOCK_DGRAM.

        reuse_address tells the kernel to reuse a local socket in
        TIME_WAIT state, without waiting for its natural timeout to
        expire. If not specified it will automatically be set to True on
        UNIX.

        reuse_port tells the kernel to allow this endpoint to be bound to
        the same port as other existing endpoints are bound to, so long as
        they all set this flag when being created. This option is not
        supported on Windows and some UNIX's. If the
        :py:data:`~socket.SO_REUSEPORT` constant is not defined then this
        capability is unsupported.

        allow_broadcast tells the kernel to allow this endpoint to send
        messages to the broadcast address.

        sock can optionally be specified in order to use a preexisting
        socket object.
        r|)r$r�r��remote_addrr�r�r�r�r�r�r�s           r)�create_datagram_endpointz*AbstractEventLoop.create_datagram_endpoint�s����B"�!�r�c��K�t��w)aRegister read pipe in event loop. Set the pipe to non-blocking mode.

        protocol_factory should instantiate object with Protocol interface.
        pipe is a file-like object.
        Return pair (transport, protocol), where transport supports the
        ReadTransport interface.r|�r$r��pipes   r)�connect_read_pipez#AbstractEventLoop.connect_read_pipe������"�!�r�c��K�t��w)aRegister write pipe in event loop.

        protocol_factory should instantiate object with BaseProtocol interface.
        Pipe is file-like object already switched to nonblocking.
        Return pair (transport, protocol), where transport support
        WriteTransport interface.r|r�s   r)�connect_write_pipez$AbstractEventLoop.connect_write_pipe�r�r�)�stdin�stdout�stderrc��K�t��wr=r|)r$r��cmdr�r�r��kwargss       r)�subprocess_shellz"AbstractEventLoop.subprocess_shellr�r�c��K�t��wr=r|)r$r�r�r�r�r&r�s       r)�subprocess_execz!AbstractEventLoop.subprocess_exec
r�r�c��t�r=r|�r$�fdr%r&s    r)�
add_readerzAbstractEventLoop.add_readerr�r+c��t�r=r|�r$rs  r)�
remove_readerzAbstractEventLoop.remove_readerr�r+c��t�r=r|rs    r)�
add_writerzAbstractEventLoop.add_writerr�r+c��t�r=r|rs  r)�
remove_writerzAbstractEventLoop.remove_writer"r�r+c��K�t��wr=r|)r$r��nbytess   r)�	sock_recvzAbstractEventLoop.sock_recv'r�r�c��K�t��wr=r|)r$r��bufs   r)�sock_recv_intoz AbstractEventLoop.sock_recv_into*r�r�c��K�t��wr=r|)r$r��bufsizes   r)�
sock_recvfromzAbstractEventLoop.sock_recvfrom-r�r�c��K�t��wr=r|)r$r�rr
s    r)�sock_recvfrom_intoz$AbstractEventLoop.sock_recvfrom_into0r�r�c��K�t��wr=r|)r$r��datas   r)�sock_sendallzAbstractEventLoop.sock_sendall3r�r�c��K�t��wr=r|)r$r�r�addresss    r)�sock_sendtozAbstractEventLoop.sock_sendto6r�r�c��K�t��wr=r|)r$r�rs   r)�sock_connectzAbstractEventLoop.sock_connect9r�r�c��K�t��wr=r|)r$r�s  r)�sock_acceptzAbstractEventLoop.sock_accept<r�r�c��K�t��wr=r|)r$r�r�r�r�r�s      r)�
sock_sendfilezAbstractEventLoop.sock_sendfile?r�r�c��t�r=r|)r$�sigr%r&s    r)�add_signal_handlerz$AbstractEventLoop.add_signal_handlerEr�r+c��t�r=r|)r$r$s  r)�remove_signal_handlerz'AbstractEventLoop.remove_signal_handlerHr�r+c��t�r=r|)r$�factorys  r)�set_task_factoryz"AbstractEventLoop.set_task_factoryMr�r+c��t�r=r|r>s r)�get_task_factoryz"AbstractEventLoop.get_task_factoryPr�r+c��t�r=r|r>s r)�get_exception_handlerz'AbstractEventLoop.get_exception_handlerUr�r+c��t�r=r|)r$�handlers  r)�set_exception_handlerz'AbstractEventLoop.set_exception_handlerXr�r+c��t�r=r|�r$r(s  r)�default_exception_handlerz+AbstractEventLoop.default_exception_handler[r�r+c��t�r=r|r3s  r)rMz(AbstractEventLoop.call_exception_handler^r�r+c��t�r=r|r>s r)r zAbstractEventLoop.get_debugcr�r+c��t�r=r|)r$�enableds  r)�	set_debugzAbstractEventLoop.set_debugfr�r+)r�NN)rNr=)@r1rRrSrTr�r�r�r�r�r~r�r�rwr�r�r�r�r�r�r�r�r�r�r�r��socket�	AF_UNSPEC�
AI_PASSIVEr�r�r�r�r�r�r�r�r��
subprocess�PIPEr�rrrr	rrrrrrrrr r"r%r'r*r,r.r1r4rMr r9rVr+r)rr�s?���"�"�"�"�"�	"�"�"�"�26�D�:>�"�6:�"�"�"�
)-�d�"�
=A�"�"�"�"#��!�1�"�"�59�"�����$�4� �"&�!%�!%�$�"�59�8"��&�&��#�#�$���D�T�"&�!%��8"�t"�#'�"�%*�(,�.2�-1�	
"�*.�"��4� �"&�!%�"�*.�""��s��"&�!%��""�L�"&�!%�	
"� EI�!"�./�q��59�d�7;�$�	!"�J"�"�&0�_�_�&0�o�o�&0�o�o�"�%/�O�O�%/�_�_�%/�_�_�"�"�"�"�"�
"�"�"�"�"�"�"�"�"�(,�"�"�"�
"�"�
"�"�"�"�
"�"r+rc�.�eZdZdZd�Zd�Zd�Zd�Zd�Zy)rz-Abstract policy for accessing the event loop.c��t�)a>Get the event loop for the current context.

        Returns an event loop object implementing the AbstractEventLoop interface,
        or raises an exception in case no event loop has been set for the
        current context and the current policy does not specify to create one.

        It should never return None.r|r>s r)r	z&AbstractEventLoopPolicy.get_event_loopms
��"�!r+c��t�)z3Set the event loop for the current context to loop.r|�r$r's  r)r
z&AbstractEventLoopPolicy.set_event_loopwrr+c��t�)z�Create and return a new event loop object according to this
        policy's rules. If there's need to set this loop as the event loop for
        the current context, set_event_loop must be called explicitly.r|r>s r)rz&AbstractEventLoopPolicy.new_event_loop{s
��"�!r+c��t�)z$Get the watcher for child processes.r|r>s r)rz)AbstractEventLoopPolicy.get_child_watcher�rr+c��t�)z$Set the watcher for child processes.r|)r$�watchers  r)r
z)AbstractEventLoopPolicy.set_child_watcher�rr+N)	r1rRrSrTr	r
rrr
rVr+r)rrjs��7�"�"�"�"�"r+rc�V�eZdZdZdZGd�dej�Zd�Zd�Z	d�Z
d�Zy)	�BaseDefaultEventLoopPolicya�Default policy implementation for accessing the event loop.

    In this policy, each thread has its own event loop.  However, we
    only automatically create an event loop by default for the main
    thread; other threads by default have no event loop.

    Other policies may have different rules (e.g. a single global
    event loop, or automatically creating an event loop per thread, or
    using some other notion of context to which an event loop is
    associated).
    Nc��eZdZdZdZy)�!BaseDefaultEventLoopPolicy._LocalNF)r1rRrSr�_set_calledrVr+r)�_LocalrK�s�����r+rMc�.�|j�|_yr=)rM�_localr>s r)r*z#BaseDefaultEventLoopPolicy.__init__�s���k�k�m��r+c��|jj��|jjs�tj�tj
�ur�d}	t
jd�}|rG|jjd�}|dk(s|jd�sn|j}|dz
}|r�F	ddl
}|jdt|�	�|j!|j#��|jj�*t%d
tj�j&z��|jjS#t$rY��wxYw)zvGet the event loop for the current context.

        Returns an instance of EventLoop or raises an exception.
        Nr^rr1�asynciozasyncio.rzThere is no current event loop)�
stacklevelz,There is no current event loop in thread %r.)rOrrL�	threading�current_thread�main_threadr"r#�	f_globals�get�
startswith�f_back�AttributeError�warnings�warn�DeprecationWarningr
r�RuntimeErrorr�)r$rR�f�moduler[s     r)r	z)BaseDefaultEventLoopPolicy.get_event_loop�s/��

�K�K���%��K�K�+�+��(�(�*�i�.C�.C�.E�E��J�
$��M�M�!�$����[�[�_�_�Z�8�F�"�i�/�6�3D�3D�Z�3P�����A��!�O�J��
��M�M�:�,��
�
E����� 3� 3� 5�6��;�;���$��M�!*�!9�!9�!;�!@�!@� A�B�
B��{�{� � � ��)"�
��
�s�E�	E�Ec��d|j_|�2t|t�s"t	dt|�j�d���||j_y)zSet the event loop.TNz<loop must be an instance of AbstractEventLoop or None, not '�')rOrLrfr�	TypeErrorr�r1rrCs  r)r
z)BaseDefaultEventLoopPolicy.set_event_loop�sN��"&�������J�t�5F�$G��Z�[_�`d�[e�[n�[n�Zo�op�q�r�r� ����r+c�"�|j�S)zvCreate a new event loop.

        You must call set_event_loop() to make this the current event
        loop.
        )�
_loop_factoryr>s r)rz)BaseDefaultEventLoopPolicy.new_event_loop�s���!�!�#�#r+)r1rRrSrTrerS�localrMr*r	r
rrVr+r)rIrI�s3��
��M������$�!�B!�$r+rIc��eZdZdZy)�_RunningLoopr:N)r1rRrS�loop_pidrVr+r)rhrh�s���Hr+rhc�4�t�}|�td��|S)zrReturn the running event loop.  Raise a RuntimeError if there is none.

    This function is thread-specific.
    zno running event loop)rr^�r's r)rr�s"����D��|��2�3�3��Kr+c�b�tj\}}|�|tj�k(r|Syy)z�Return the running event loop or None.

    This is a low-level function intended to be used by event loops.
    This function is thread-specific.
    N)�
_running_loopri�os�getpid)�running_loop�pids  r)rr�s5��&�.�.��L�#���C�2�9�9�;�$6���%7�r+c�B�|tj�ft_y)z�Set the running event loop.

    This is a low-level function intended to be used by event loops.
    This function is thread-specific.
    N)rnrormrirks r)rr�s��#�B�I�I�K�0�M�r+c�`�t5t�
ddlm}|�addd�y#1swYyxYw)Nr��DefaultEventLoopPolicy)�_lock�_event_loop_policy�rurts r)�_init_event_loop_policyrys,��	�:��%�0�!7�!9��:�:�:�s�$�-c�.�t�
t�tS)z"Get the current event loop policy.)rwryrVr+r)rrs���!��!��r+c�p�|�2t|t�s"tdt|�j�d���|ay)zZSet the current event loop policy.

    If policy is None, the default policy is restored.NzDpolicy must be an instance of AbstractEventLoopPolicy or None, not 'rb)rfrrcr�r1rw)�policys r)rrs>��
��*�V�5L�"M��^�_c�dj�_k�_t�_t�^u�uv�w�x�x��r+c�N�t�}|�|St�j�S)aGReturn an asyncio event loop.

    When called from a coroutine or a callback (e.g. scheduled with call_soon
    or similar API), this function will always return the running event loop.

    If there is no running event loop set, the function will return
    the result of `get_event_loop_policy().get_event_loop()` call.
    )rrr	)�current_loops r)r	r	 s*��%�&�L����� �"�1�1�3�3r+c�6�t�j|�y)zCEquivalent to calling get_event_loop_policy().set_event_loop(loop).N)rr
rks r)r
r
0s����*�*�4�0r+c�2�t�j�S)z?Equivalent to calling get_event_loop_policy().new_event_loop().)rrrVr+r)rr5s�� �"�1�1�3�3r+c�2�t�j�S)zBEquivalent to calling get_event_loop_policy().get_child_watcher().)rrrVr+r)rr:s�� �"�4�4�6�6r+c�4�t�j|�S)zMEquivalent to calling
    get_event_loop_policy().set_child_watcher(watcher).)rr
)rGs r)r
r
?s��!�"�4�4�W�=�=r+)rrrr	�forkc��t�tj�t_t	d�tjd�y)Nr.)rwrIrMrOr�signal�
set_wakeup_fdrVr+r)�on_forkr�]s0���)�(B�(I�(I�(K��%��$�����R� r+)�after_in_child)/rT�__all__rrnr�r;r>r"rSrxrrrrrrrIrw�Lockrvrfrhrmrrrryrrr	r
rrr
�_py__get_running_loop�_py__set_running_loop�_py_get_running_loop�_py_get_event_loop�_asyncio�_c__get_running_loop�_c__set_running_loop�_c_get_running_loop�_c_get_event_loop�ImportError�hasattrr��register_at_forkrVr+r)�<module>r�s]��'�	���	�
�
��
���J�J�Z<�&�<�~'!�'!�TT"�T"�n"�"�DD$�!8�D$�V��	�	������9�?�?����
�	�	�1�:�� �
4� 1�
4�
7�
>�*��)��'��#��
'�<�<�-��,��*��&���2�v��!��B���w�/����	��	�s�>C3�3C;�:C;
¿Qué es la limpieza dental de perros? - Clínica veterinaria


Es la eliminación del sarro y la placa adherida a la superficie de los dientes mediante un equipo de ultrasonidos que garantiza la integridad de las piezas dentales a la vez que elimina en profundidad cualquier resto de suciedad.

A continuación se procede al pulido de los dientes mediante una fresa especial que elimina la placa bacteriana y devuelve a los dientes el aspecto sano que deben tener.

Una vez terminado todo el proceso, se mantiene al perro en observación hasta que se despierta de la anestesia, bajo la atenta supervisión de un veterinario.

¿Cada cuánto tiempo tengo que hacerle una limpieza dental a mi perro?

A partir de cierta edad, los perros pueden necesitar una limpieza dental anual o bianual. Depende de cada caso. En líneas generales, puede decirse que los perros de razas pequeñas suelen acumular más sarro y suelen necesitar una atención mayor en cuanto a higiene dental.


Riesgos de una mala higiene


Los riesgos más evidentes de una mala higiene dental en los perros son los siguientes:

  • Cuando la acumulación de sarro no se trata, se puede producir una inflamación y retracción de las encías que puede descalzar el diente y provocar caídas.
  • Mal aliento (halitosis).
  • Sarro perros
  • Puede ir a más
  • Las bacterias de la placa pueden trasladarse a través del torrente circulatorio a órganos vitales como el corazón ocasionando problemas de endocarditis en las válvulas. Las bacterias pueden incluso acantonarse en huesos (La osteomielitis es la infección ósea, tanto cortical como medular) provocando mucho dolor y una artritis séptica).

¿Cómo se forma el sarro?

El sarro es la calcificación de la placa dental. Los restos de alimentos, junto con las bacterias presentes en la boca, van a formar la placa bacteriana o placa dental. Si la placa no se retira, al mezclarse con la saliva y los minerales presentes en ella, reaccionará formando una costra. La placa se calcifica y se forma el sarro.

El sarro, cuando se forma, es de color blanquecino pero a medida que pasa el tiempo se va poniendo amarillo y luego marrón.

Síntomas de una pobre higiene dental
La señal más obvia de una mala salud dental canina es el mal aliento.

Sin embargo, a veces no es tan fácil de detectar
Y hay perros que no se dejan abrir la boca por su dueño. Por ejemplo…

Recientemente nos trajeron a la clínica a un perro que parpadeaba de un ojo y decía su dueño que le picaba un lado de la cara. Tenía molestias y dificultad para comer, lo que había llevado a sus dueños a comprarle comida blanda (que suele ser un poco más cara y llevar más contenido en grasa) durante medio año. Después de una exploración oftalmológica, nos dimos cuenta de que el ojo tenía una úlcera en la córnea probablemente de rascarse . Además, el canto lateral del ojo estaba inflamado. Tenía lo que en humanos llamamos flemón pero como era un perro de pelo largo, no se le notaba a simple vista. Al abrirle la boca nos llamó la atención el ver una muela llena de sarro. Le realizamos una radiografía y encontramos una fístula que llegaba hasta la parte inferior del ojo.

Le tuvimos que extraer la muela. Tras esto, el ojo se curó completamente con unos colirios y una lentilla protectora de úlcera. Afortunadamente, la úlcera no profundizó y no perforó el ojo. Ahora el perro come perfectamente a pesar de haber perdido una muela.

¿Cómo mantener la higiene dental de tu perro?
Hay varias maneras de prevenir problemas derivados de la salud dental de tu perro.

Limpiezas de dientes en casa
Es recomendable limpiar los dientes de tu perro semanal o diariamente si se puede. Existe una gran variedad de productos que se pueden utilizar:

Pastas de dientes.
Cepillos de dientes o dedales para el dedo índice, que hacen más fácil la limpieza.
Colutorios para echar en agua de bebida o directamente sobre el diente en líquido o en spray.

En la Clínica Tus Veterinarios enseñamos a nuestros clientes a tomar el hábito de limpiar los dientes de sus perros desde que son cachorros. Esto responde a nuestro compromiso con la prevención de enfermedades caninas.

Hoy en día tenemos muchos clientes que limpian los dientes todos los días a su mascota, y como resultado, se ahorran el dinero de hacer limpiezas dentales profesionales y consiguen una mejor salud de su perro.


Limpiezas dentales profesionales de perros y gatos

Recomendamos hacer una limpieza dental especializada anualmente. La realizamos con un aparato de ultrasonidos que utiliza agua para quitar el sarro. Después, procedemos a pulir los dientes con un cepillo de alta velocidad y una pasta especial. Hacemos esto para proteger el esmalte.

La frecuencia de limpiezas dentales necesaria varía mucho entre razas. En general, las razas grandes tienen buena calidad de esmalte, por lo que no necesitan hacerlo tan a menudo e incluso pueden pasarse la vida sin requerir una limpieza. Sin embargo, razas pequeñas como el Yorkshire o el Maltés, deben hacérselas todos los años desde cachorros si se quiere conservar sus piezas dentales.

Otro factor fundamental es la calidad del pienso. Algunas marcas han diseñado croquetas que limpian la superficie del diente y de la muela al masticarse.

Ultrasonido para perros

¿Se necesita anestesia para las limpiezas dentales de perros y gatos?

La limpieza dental en perros no es una técnica que pueda practicarse sin anestesia general , aunque hay veces que los propietarios no quieren anestesiar y si tiene poco sarro y el perro es muy bueno se puede intentar…… , pero no se va a poder pulir ni acceder a todas la zona de la boca …. Además los limpiadores dentales van a irrigar agua y hay riesgo de aspiración a vías respiratorias si no se realiza una anestesia correcta con intubación traqueal . En resumen , sin anestesia no se va hacer una correcta limpieza dental.

Tampoco sirve la sedación ya que necesitamos que el animal esté totalmente quieto, y el veterinario tenga un acceso completo a todas sus piezas dentales y encías.

Alimentos para la limpieza dental

Hay que tener cierto cuidado a la hora de comprar determinados alimentos porque no todos son saludables. Algunos tienen demasiado contenido graso, que en exceso puede causar problemas cardiovasculares y obesidad.

Los mejores alimentos para los dientes son aquellos que están elaborados por empresas farmacéuticas y llevan componentes químicos con tratamientos específicos para el diente del perro. Esto implica no solo limpieza a través de la acción mecánica de morder sino también un tratamiento antibacteriano para prevenir el sarro.

Conclusión

Si eres como la mayoría de dueños, por falta de tiempo , es probable que no estés prestando la suficiente atención a la limpieza dental de tu perro. Por eso te animamos a que comiences a limpiar los dientes de tu perro y consideres atender a su higiene bucal con frecuencia.

Estas simples medidas pueden conllevar a que tu perro tenga una vida más larga y mucho más saludable.

Si te resulta imposible introducir un cepillo de dientes a tu perro en la boca, pásate con él por clínica Tus Veterinarios y te explicamos cómo hacerlo.

Necesitas hacer una limpieza dental profesional a tu mascota?
Llámanos al 622575274 o contacta con nosotros

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¡Hola!