ipykernel icon indicating copy to clipboard operation
ipykernel copied to clipboard

ContextVar not preserved when cell contains `await`

Open mvolfik opened this issue 2 years ago • 3 comments

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

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

mvolfik avatar Aug 18 '21 19:08 mvolfik

I ran into this same issue today with ipykernel==6.20.2.

tbenthompson avatar Feb 14 '23 01:02 tbenthompson

This is still an issue

RRRajput avatar Jan 15 '24 09:01 RRRajput