You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importcontextvars, asyncioVAR=contextvars.ContextVar("VAR", default="default")
asyncdefproduce_result(x):
returnxasyncdefread_var():
print("Var:", VAR.get())
# The following is broken# In[3]:result=awaitproduce_result("bug fixed yayy")
VAR.set(result)
# In[4]:awaitread_var()
# Var: default# The following works# In[5]:result=awaitproduce_result("this worked before")
# In[6]:VAR.set(result)
# In[7]:awaitread_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.
I have ran into this and see no workaround nor any way to solve it.
Has somebody found any alternative for allowing my code to work? I am using code as an external library and it is broken because of this ContextVar variable being lost between cells.
Also, what does anybody know the technical reason behind this limitation? I was trying to debug and pinpoint the origin but I don't know a lot of internals, I assume that ipykernel is creating a task/copying context when the cell contains an await and thus it is breaking the expected code flow but that is a wild assumption that I have not confirmed.
See https://gist.github.com/mvolfik/2582939ec00120a04503507214c24105
In the working case,
await
result is stored in a variable, andVAR
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') withipykernel==5.5.0
.Related to ipython issue ipython/ipython#11565, which was fixed by #632
The text was updated successfully, but these errors were encountered: