ipython / ipython/ipykernel

ContextVar not preserved when cell contains `await`

Abierto
#749 3 comentarios 2 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
734
Forks
412
Merge medio
1 d 5 h
PR fusionados (30 d)
8

Descripción

See https://gist.github.com/mvolfik/2582939ec00120a04503507214c24105

```python3
import contextvars, asyncio
VAR = contextvars.ContextVar("VAR", default="default")

async def produce_result(x):
return x

async def read_var():
print("Var:", VAR.get())

# The following is broken

# In[3]:
result = await produce_result("bug fixed yayy")
VAR.set(result)

# In[4]:
await read_var()
# Var: default

# The following works

# In[5]:
result = await produce_result("this worked before")

# In[6]:
VAR.set(result)

# In[7]:
await read_var()
# Var: this worked before
```

In the working case, `await` result is stored in a variable, and `VAR` is set from cell which is fully synchronous (idk ipython internals, but that's what I guess makes the difference). What breaks is setting var from the same cell where we call and await the async function.

I'm using `ipykernel==6.2.0`. Neither of these cases worked (both outputted 'default') with `ipykernel==5.5.0`.

Related to ipython issue ipython/ipython#11565, which was fixed by #632

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.