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
{{ message }}
Repository navigation
ContextVar not preserved when cell contains await #749
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.
Activity
tbenthompson commentedon Feb 14, 2023
I ran into this same issue today with
ipykernel==6.20.2.RRRajput commentedon Jan 15, 2024
This is still an issue
alexbarcelo commentedon Jun 3, 2024
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
ContextVarvariable 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.