# Copyright (C) 2001-2020, Python Software Foundation # This file is distributed under the same license as the Python package. # Maintained by the python-doc-es workteam. # docs-es@python.org / # https://mail.python.org/mailman3/lists/docs-es.python.org/ # Check https://github.com/python/python-docs-es/blob/3.8/TRANSLATORS to # get the list of volunteers # msgid "" msgstr "" "Project-Id-Version: Python 3.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-11-21 16:38-0300\n" "PO-Revision-Date: 2023-11-01 13:57+0100\n" "Last-Translator: Marcos Medrano \n" "Language: es\n" "Language-Team: python-doc-es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" #: ../Doc/library/asyncio-dev.rst:7 msgid "Developing with asyncio" msgstr "Desarrollando con asyncio" #: ../Doc/library/asyncio-dev.rst:9 msgid "" "Asynchronous programming is different from classic \"sequential\" " "programming." msgstr "" "La programación asincrónica es diferente a la programación \"secuencial\" " "clásica." #: ../Doc/library/asyncio-dev.rst:12 msgid "" "This page lists common mistakes and traps and explains how to avoid them." msgstr "" "Esta página enumera errores y trampas comunes y explica cómo evitarlos." #: ../Doc/library/asyncio-dev.rst:19 msgid "Debug Mode" msgstr "Modo depuración" #: ../Doc/library/asyncio-dev.rst:21 msgid "" "By default asyncio runs in production mode. In order to ease the " "development asyncio has a *debug mode*." msgstr "" "Por defecto asyncio se ejecuta en modo producción. Para facilitar el " "desarrollo asyncio tiene un *modo depuración*." #: ../Doc/library/asyncio-dev.rst:24 msgid "There are several ways to enable asyncio debug mode:" msgstr "Hay varias maneras de habilitar el modo depuración de asyncio:" #: ../Doc/library/asyncio-dev.rst:26 msgid "Setting the :envvar:`PYTHONASYNCIODEBUG` environment variable to ``1``." msgstr "" "Definiendo la variable de entorno :envvar:`PYTHONASYNCIODEBUG` a ``1``." #: ../Doc/library/asyncio-dev.rst:28 msgid "Using the :ref:`Python Development Mode `." msgstr "Usando :ref:`Modo de Desarrollo de Python `." #: ../Doc/library/asyncio-dev.rst:30 msgid "Passing ``debug=True`` to :func:`asyncio.run`." msgstr "Pasando ``debug=True`` a :func:`asyncio.run`." #: ../Doc/library/asyncio-dev.rst:32 msgid "Calling :meth:`loop.set_debug`." msgstr "Invocando :meth:`loop.set_debug`." #: ../Doc/library/asyncio-dev.rst:34 msgid "In addition to enabling the debug mode, consider also:" msgstr "Además de habilitar el modo depuración, considere también:" #: ../Doc/library/asyncio-dev.rst:36 msgid "" "setting the log level of the :ref:`asyncio logger ` to :py:" "const:`logging.DEBUG`, for example the following snippet of code can be run " "at startup of the application::" msgstr "" "definir el nivel de log del :ref:`asyncio logger ` a :py:" "const:`logging.DEBUG`, por ejemplo el siguiente fragmento de código puede " "ser ejecutado al inicio de la aplicación:" #: ../Doc/library/asyncio-dev.rst:40 msgid "logging.basicConfig(level=logging.DEBUG)" msgstr "" #: ../Doc/library/asyncio-dev.rst:42 msgid "" "configuring the :mod:`warnings` module to display :exc:`ResourceWarning` " "warnings. One way of doing that is by using the :option:`-W` ``default`` " "command line option." msgstr "" "configurando el módulo :mod:`warnings` para mostrar advertencias :exc:" "`ResourceWarning`. Una forma de hacerlo es usando la opción :option:`-W` " "``default`` de la línea de comandos." #: ../Doc/library/asyncio-dev.rst:47 msgid "When the debug mode is enabled:" msgstr "Cuando el modo depuración está habilitado:" #: ../Doc/library/asyncio-dev.rst:49 msgid "" "asyncio checks for :ref:`coroutines that were not awaited ` and logs them; this mitigates the \"forgotten await\" " "pitfall." msgstr "" "asyncio comprueba las :ref:`corrutinas que no son esperadas ` y las registra; esto mitiga la dificultad de las " "\"esperas olvidadas\"." #: ../Doc/library/asyncio-dev.rst:53 msgid "" "Many non-threadsafe asyncio APIs (such as :meth:`loop.call_soon` and :meth:" "`loop.call_at` methods) raise an exception if they are called from a wrong " "thread." msgstr "" "Muchas APIs asyncio que no son seguras para hilos (como los métodos :meth:" "`loop.call_soon` y :meth:`loop.call_at`) generan una excepción si son " "llamados desde un hilo equivocado." #: ../Doc/library/asyncio-dev.rst:57 msgid "" "The execution time of the I/O selector is logged if it takes too long to " "perform an I/O operation." msgstr "" "El tiempo de ejecución del selector E/S es registrado si tarda demasiado " "tiempo en realizar una operación E/S." #: ../Doc/library/asyncio-dev.rst:60 msgid "" "Callbacks taking longer than 100 milliseconds are logged. The :attr:`loop." "slow_callback_duration` attribute can be used to set the minimum execution " "duration in seconds that is considered \"slow\"." msgstr "" "Los callbacks que tardan más de 100ms son registrados. El atributo :attr:" "`loop.slow_callback_duration` puede ser usado para definir la duración " "mínima de ejecución en segundos que se considere como \"lenta\"." #: ../Doc/library/asyncio-dev.rst:68 msgid "Concurrency and Multithreading" msgstr "Concurrencia y multihilo" #: ../Doc/library/asyncio-dev.rst:70 msgid "" "An event loop runs in a thread (typically the main thread) and executes all " "callbacks and Tasks in its thread. While a Task is running in the event " "loop, no other Tasks can run in the same thread. When a Task executes an " "``await`` expression, the running Task gets suspended, and the event loop " "executes the next Task." msgstr "" "Un bucle de eventos se ejecuta en un hilo (generalmente el hilo principal) y " "ejecuta todos los callbacks y las Tareas en su hilo. Mientras una Tarea está " "ejecutándose en el bucle de eventos, ninguna otra Tarea puede ejecutarse en " "el mismo hilo. Cuando una Tarea ejecuta una expresión ``await``, la Tarea en " "ejecución se suspende y el bucle de eventos ejecuta la siguiente Tarea." #: ../Doc/library/asyncio-dev.rst:76 msgid "" "To schedule a :term:`callback` from another OS thread, the :meth:`loop." "call_soon_threadsafe` method should be used. Example::" msgstr "" "Para programar un :term:`callback` desde otro hilo del SO, se debe usar el " "método :meth:`loop.call_soon_threadsafe`. Ejemplo::" #: ../Doc/library/asyncio-dev.rst:79 msgid "loop.call_soon_threadsafe(callback, *args)" msgstr "" #: ../Doc/library/asyncio-dev.rst:81 msgid "" "Almost all asyncio objects are not thread safe, which is typically not a " "problem unless there is code that works with them from outside of a Task or " "a callback. If there's a need for such code to call a low-level asyncio " "API, the :meth:`loop.call_soon_threadsafe` method should be used, e.g.::" msgstr "" "Casi ningún objeto asyncio es seguro entre hilos (*thread safe*), lo cual " "generalmente no es un problema a no ser que haya código que trabaje con " "ellos desde fuera de una Tarea o un callback. Si tal código necesita llamar " "a la API de asyncio de bajo nivel, se debe usar el método :meth:`loop." "call_soon_threadsafe`, por ejemplo::" #: ../Doc/library/asyncio-dev.rst:87 msgid "loop.call_soon_threadsafe(fut.cancel)" msgstr "" #: ../Doc/library/asyncio-dev.rst:89 msgid "" "To schedule a coroutine object from a different OS thread, the :func:" "`run_coroutine_threadsafe` function should be used. It returns a :class:" "`concurrent.futures.Future` to access the result::" msgstr "" "Para programar un objeto de corrutina desde una hilo diferente del sistema " "operativo se debe usar la función :func:`run_coroutine_threadsafe`. Esta " "retorna un :class:`concurrent.futures.Future` para acceder al resultado::" #: ../Doc/library/asyncio-dev.rst:93 msgid "" "async def coro_func():\n" " return await asyncio.sleep(1, 42)\n" "\n" "# Later in another OS thread:\n" "\n" "future = asyncio.run_coroutine_threadsafe(coro_func(), loop)\n" "# Wait for the result:\n" "result = future.result()" msgstr "" #: ../Doc/library/asyncio-dev.rst:102 msgid "To handle signals the event loop must be run in the main thread." msgstr "" "Para manejar señales el bucle de eventos debe ser ejecutado en el hilo " "principal." #: ../Doc/library/asyncio-dev.rst:105 msgid "" "The :meth:`loop.run_in_executor` method can be used with a :class:" "`concurrent.futures.ThreadPoolExecutor` to execute blocking code in a " "different OS thread without blocking the OS thread that the event loop runs " "in." msgstr "" "El método :meth:`loop.run_in_executor` puede ser usado con un :class:" "`concurrent.futures.ThreadPoolExecutor` para ejecutar código bloqueante en " "un hilo diferente del sistema operativo sin bloquear el hilo del sistema " "operativo en el que el bucle de eventos está siendo ejecutado." #: ../Doc/library/asyncio-dev.rst:110 msgid "" "There is currently no way to schedule coroutines or callbacks directly from " "a different process (such as one started with :mod:`multiprocessing`). The :" "ref:`asyncio-event-loop-methods` section lists APIs that can read from pipes " "and watch file descriptors without blocking the event loop. In addition, " "asyncio's :ref:`Subprocess ` APIs provide a way to start " "a process and communicate with it from the event loop. Lastly, the " "aforementioned :meth:`loop.run_in_executor` method can also be used with a :" "class:`concurrent.futures.ProcessPoolExecutor` to execute code in a " "different process." msgstr "" "Actualmente no hay forma de programar corrutinas o retrollamadas " "directamente desde un proceso diferente (como uno que haya comenzado con :" "mod:`multiprocessing`). La sección :ref:`asyncio-event-loop-methods` enumera " "las API que pueden leer desde tuberías y descriptores de archivos sin " "bloquear el bucle de eventos. Además, las API :ref:`Subprocess ` de asyncio proporcionan una forma de iniciar un proceso y " "comunicarse con él desde el bucle de eventos. Por último, el método :meth:" "`loop.run_in_executor` mencionado anteriormente también se puede usar con " "un :class:`concurrent.futures.ProcessPoolExecutor` para ejecutar código en " "un proceso diferente." #: ../Doc/library/asyncio-dev.rst:124 msgid "Running Blocking Code" msgstr "Ejecutando código bloqueante" #: ../Doc/library/asyncio-dev.rst:126 msgid "" "Blocking (CPU-bound) code should not be called directly. For example, if a " "function performs a CPU-intensive calculation for 1 second, all concurrent " "asyncio Tasks and IO operations would be delayed by 1 second." msgstr "" "Código bloqueante (dependiente de la CPU) no debe ser ejecutado " "directamente. Por ejemplo, si una función realiza un cálculo intensivo de " "CPU durante 1 segundo, todas las Tareas y operaciones de Entrada/Salida (IO) " "concurrentes se retrasarían 1 segundo." #: ../Doc/library/asyncio-dev.rst:131 msgid "" "An executor can be used to run a task in a different thread or even in a " "different process to avoid blocking the OS thread with the event loop. See " "the :meth:`loop.run_in_executor` method for more details." msgstr "" "Un ejecutor puede ser usado para ejecutar una tarea en un hilo diferente o " "incluso en un proceso diferente para evitar bloquear el hilo del sistema " "operativo con el bucle de eventos. Consulte el método :meth:`loop." "run_in_executor` para más detalles." #: ../Doc/library/asyncio-dev.rst:140 msgid "Logging" msgstr "Logueando" #: ../Doc/library/asyncio-dev.rst:142 msgid "" "asyncio uses the :mod:`logging` module and all logging is performed via the " "``\"asyncio\"`` logger." msgstr "" "asyncio usa el módulo :mod:`logging` y todo el logueo es realizado mediante " "el logger ``\"asyncio\"``." #: ../Doc/library/asyncio-dev.rst:145 msgid "" "The default log level is :py:const:`logging.INFO`, which can be easily " "adjusted::" msgstr "" "El nivel de log por defecto es :py:const:`logging.INFO`, el cual puede ser " "fácilmente ajustado::" #: ../Doc/library/asyncio-dev.rst:148 msgid "logging.getLogger(\"asyncio\").setLevel(logging.WARNING)" msgstr "" #: ../Doc/library/asyncio-dev.rst:151 msgid "" "Network logging can block the event loop. It is recommended to use a " "separate thread for handling logs or use non-blocking IO. For example, see :" "ref:`blocking-handlers`." msgstr "" "Loguear por la red puede bloquear el bucle de eventos. Se recomienda usar un " "subproceso separado para manejar registros o usar sin bloqueo IO. Por " "ejemplo, consulte :ref:`blocking-handlers`." #: ../Doc/library/asyncio-dev.rst:159 msgid "Detect never-awaited coroutines" msgstr "Detectar corrutinas no esperadas" #: ../Doc/library/asyncio-dev.rst:161 msgid "" "When a coroutine function is called, but not awaited (e.g. ``coro()`` " "instead of ``await coro()``) or the coroutine is not scheduled with :meth:" "`asyncio.create_task`, asyncio will emit a :exc:`RuntimeWarning`::" msgstr "" "Cuando una función de corrutina es invocada, pero no esperada (por ejemplo " "``coro()`` en lugar de ``await coro()``) o la corrutina no es programada " "con :meth:`asyncio.create_task`, asyncio emitirá una :exc:`RuntimeWarning`::" #: ../Doc/library/asyncio-dev.rst:166 msgid "" "import asyncio\n" "\n" "async def test():\n" " print(\"never scheduled\")\n" "\n" "async def main():\n" " test()\n" "\n" "asyncio.run(main())" msgstr "" #: ../Doc/library/asyncio-dev.rst:176 ../Doc/library/asyncio-dev.rst:221 msgid "Output::" msgstr "Salida::" #: ../Doc/library/asyncio-dev.rst:178 msgid "" "test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n" " test()" msgstr "" #: ../Doc/library/asyncio-dev.rst:181 ../Doc/library/asyncio-dev.rst:237 msgid "Output in debug mode::" msgstr "Salida en modo depuración::" #: ../Doc/library/asyncio-dev.rst:183 msgid "" "test.py:7: RuntimeWarning: coroutine 'test' was never awaited\n" "Coroutine created at (most recent call last)\n" " File \"../t.py\", line 9, in \n" " asyncio.run(main(), debug=True)\n" "\n" " < .. >\n" "\n" " File \"../t.py\", line 7, in main\n" " test()\n" " test()" msgstr "" #: ../Doc/library/asyncio-dev.rst:194 msgid "" "The usual fix is to either await the coroutine or call the :meth:`asyncio." "create_task` function::" msgstr "" "La solución habitual es esperar la corrutina o llamar a la función :meth:" "`asyncio.create_task`::" #: ../Doc/library/asyncio-dev.rst:197 msgid "" "async def main():\n" " await test()" msgstr "" #: ../Doc/library/asyncio-dev.rst:202 msgid "Detect never-retrieved exceptions" msgstr "Detectar excepciones nunca recuperadas" #: ../Doc/library/asyncio-dev.rst:204 msgid "" "If a :meth:`Future.set_exception` is called but the Future object is never " "awaited on, the exception would never be propagated to the user code. In " "this case, asyncio would emit a log message when the Future object is " "garbage collected." msgstr "" "Si un :meth:`Future.set_exception` es invocado pero el objeto Futuro nunca " "es esperado, la excepción nunca será propagada al código del usuario. En " "este caso, asyncio emitiría un mensaje de registro cuando el objeto Futuro " "fuera recolectado como basura." #: ../Doc/library/asyncio-dev.rst:209 msgid "Example of an unhandled exception::" msgstr "Ejemplo de una excepción no manejada::" #: ../Doc/library/asyncio-dev.rst:211 msgid "" "import asyncio\n" "\n" "async def bug():\n" " raise Exception(\"not consumed\")\n" "\n" "async def main():\n" " asyncio.create_task(bug())\n" "\n" "asyncio.run(main())" msgstr "" #: ../Doc/library/asyncio-dev.rst:223 msgid "" "Task exception was never retrieved\n" "future: \n" " exception=Exception('not consumed')>\n" "\n" "Traceback (most recent call last):\n" " File \"test.py\", line 4, in bug\n" " raise Exception(\"not consumed\")\n" "Exception: not consumed" msgstr "" #: ../Doc/library/asyncio-dev.rst:232 msgid "" ":ref:`Enable the debug mode ` to get the traceback where " "the task was created::" msgstr "" ":ref:`Habilita el modo depuración ` para obtener el " "seguimiento de pila (*traceback*) donde la tarea fue creada::" #: ../Doc/library/asyncio-dev.rst:235 msgid "asyncio.run(main(), debug=True)" msgstr "" #: ../Doc/library/asyncio-dev.rst:239 msgid "" "Task exception was never retrieved\n" "future: \n" " exception=Exception('not consumed') created at asyncio/tasks.py:321>\n" "\n" "source_traceback: Object created at (most recent call last):\n" " File \"../t.py\", line 9, in \n" " asyncio.run(main(), debug=True)\n" "\n" "< .. >\n" "\n" "Traceback (most recent call last):\n" " File \"../t.py\", line 4, in bug\n" " raise Exception(\"not consumed\")\n" "Exception: not consumed" msgstr ""