Python en español #13: Tertulia 2020-12-29
Description
Participantes:
Jesús Cea, email: jcea@jcea.es, twitter:
@jcea, https://blog.jcea.es/,
https://www.jcea.es/. Conectando desde Madrid.Víctor Ramírez, twitter: @virako,
programador python y amante de vim, conectando desde Huelva.Miguel Sánchez, email:
msanchez@uninet.edu, conectando desde
Canarias.Juan Carlos.
Plutarco, conectando desde Madrid.
Eduardo Castro, email:
info@ecdesign.es. Conectando desde A
Guarda.Julio, conectando desde Chile.
Audio editado por Pablo Gómez, twitter:
@julebek.
La música de la entrada y la salida es "Lightning Bugs", de Jason
Shaw. Publicada en https://audionautix.com/ con licencia
- Creative Commons Attribution 4.0 International
License.
<timestamp compact="1" offset="52" ts="52">[00:52 ]<topic> Presentaciones.</topic></timestamp>
<timestamp compact="1" offset="52" ts="204">[03:24 ]<topic> Aviso legal de que se está grabando y objetivos de la
tertulia.</topic></timestamp><timestamp compact="1" offset="52" ts="382">[06:22 ]<topic> Autoimport, ¿debería ser una funcionalidad del IDE?</topic></timestamp>
- PyCharm: https://www.jetbrains.com/pycharm/.
<timestamp compact="1" offset="52" ts="772">[12:52 ]<topic> Los IDEs y las inercias.</topic></timestamp>
PyCharm: https://www.jetbrains.com/pycharm/.
Atajos de teclado.
vim: https://es.wikipedia.org/wiki/Vim.
- Ubicuo y poder editar ficheros de forma remota.
Uso del teclado en vez del ratón.
Emacs: https://es.wikipedia.org/wiki/Emacs.
<timestamp compact="1" offset="52" ts="1162">[19:22 ]<topic> Operador morsa (walrus). Sigue usándose muy poco.</topic></timestamp>
Python va complicando la sintaxis más y más.
Se habló en una tertulia anterior.
Jesús solo ha encontrado este caso útil:
Pasar de:
buf = f.read(1000)
while buf:
[Hace el procesamiento]
buf = f.read(1000)A lo siguiente:
while buf := f.read(1000):
[Hace el procesamiento]
<timestamp compact="1" offset="52" ts="1557">[25:57 ]<topic> Erratas en tertulias anteriores:</topic></timestamp>
Migración de Python a Github fue en 2017.
No es "Steering committee" sino "Steering Council".
<timestamp compact="1" offset="52" ts="1622">[27:02 ]<topic> Pablo Galindo forma parte del "council" tras las
últimas elecciones.</topic></timestamp>Charla de Pablo Galindo en la PyconES 2019 sobre el mundo
de los Core Developers de Python:
https://www.youtube.com/watch?v=qcvZOaY1emk.Algunos proyectos Python están usando Rust. Por ejemplo:
https://cryptography.io/, con cierta polémica. Mercurial
también usa Rust https://www.mercurial-scm.org/.Las variables locales pueden ser modificadas a través de su
"closure", en funciones hijas o en otros hilos. Es una
barbaridad, pero la posibilidad existe.Esto es lo que hace, por ejemplo, un debugger.
<timestamp compact="1" offset="52" ts="2137">[35:37 ]<topic> ¡Spoiler sobre la resolución del "Memory Leak"!</topic></timestamp>
Issue35930: Raising an exception raised in a "future"
instance will create reference cycles
https://bugs.python.org/issue35930.Traceback:
https://docs.python.org/3/library/traceback.htmlFrame:
https://docs.python.org/3/library/traceback.html#traceback.FrameSummary.Stack:
https://docs.python.org/3/library/traceback.html#stacksummary-objects.
<timestamp compact="1" offset="52" ts="2357">[39:17 ]<topic> Usar una técnica similar para detectar las
características de quien te llama para poder mezclar de forma
más limpia código síncrono y asíncrono.</topic></timestamp>- Biblioteca Unsync: https://pypi.org/project/unsync/.
<timestamp compact="1" offset="52" ts="2492">[41:32 ]<topic> Sigo explicando detalles de la solución del "Memory
Leak".</topic></timestamp>Issue35930: Raising an exception raised in a "future"
instance will create reference cycles
https://bugs.python.org/issue35930.Estamos continuando una conversación que ha durado varias
tertulias.Jesús Cea pone un ejemplo de cómo generar un ciclo con una
excepcion.La caja y media de cervezas se las lleva... ¡Jesús!
<timestamp compact="1" offset="52" ts="2842">[47:22 ]<topic> No se está conectando gente desde Hispanoamérica. ¿Por
qué?</topic></timestamp><timestamp compact="1" offset="52" ts="3007">[50:07 ]<topic> Más erratas: Los "tracebacks" NO son inmutables.</topic></timestamp>
<timestamp compact="1" offset="52" ts="3032">[50:32 ]<topic> Nuevo método "with_traceback()" a la hora de crear
excepciones:</topic></timestamp>https://docs.python.org/3/library/exceptions.html#BaseException.with_traceback.
Puedes generar una excepción con un "traceback"
arbitrario.El caballo de batalla del bug es que el "future"
https://docs.python.org/3/library/concurrent.futures.html
levanta una excepción y esa excepción debe "transportarse" a
otro hilo.Explicando cómo se visualizan los "traceback" si un "future"
https://docs.python.org/3/library/concurrent.futures.html
muere con una excepción.def a():
1/0
try:
a()
except Exception as e:
raise e
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in a
ZeroDivisionError: division by zeroCuando un "future"
https://docs.python.org/3/library/concurrent.futures.html
lanza una excepción, se ven "frames" repetidos.Hay varias formas de solucionar el bug. Ahora hay que pensar
en cual elegir, que sea la más simple e intuitiva.
<timestamp compact="0" offset="52" ts="3712">[01:01:52 ]<topic> Sobre el "nivel" de las tertulias y sus motivaciones.</topic></timestamp>
<timestamp compact="0" offset="52" ts="3972">[01:06:12 ]<topic> Referencia rápida a temas de la tertulia anterior:</topic></timestamp>
Dataclasses:
https://docs.python.org/3/library/dataclasses.html. Se
hablo mucho sobre ellas en la tertulia de la semana pasada.Pydantic: https://pypi.org/project/pydantic/.
FastAPI: https://pypi.org/project/fastapi/.
<timestamp compact="0" offset="52" ts="4157">[01:09:17 ]<topic> Diagnóstico exhaustivo del bug "Memory Leak", causa
raíz y propuestas de soluciones.</topic></timestamp>Issue35930: Raising an exception raised in a "future"
instance will create reference cycles
https://bugs.python.org/issue35930.Exploración del propio código fuente de Python.
Repaso detallado del funcionamiento de un "future"
https://docs.python.org/3/library/concurrent.futures.html.Uno de los problemas fundamentales de trabajar con hilos es
cómo notificar excepciones a otros hilos. La gran ventaja de
los "futures" es gestionar esto de forma trivial.Este "transporte" es lo que está ocasi