问题标签 [python-contextvars]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5927 浏览

python - 了解 Python 上下文变量

关于以下SO 答案。为了了解使用 Contextvars 和不使用 Contextvars 之间的区别,我进行了一些更改。

我希望在某些时候变量myid会损坏,但是将范围更改为更高的数字似乎根本没有影响。

结果

我应该改变什么才能看到变量的意外行为myid

0 投票
1 回答
471 浏览

python - 如何在上下文中运行协程?

在关于 Context Vars 的 Python 文档中,描述了一个 Context::run 方法以启用在上下文中执行可调用对象,因此可调用对象对上下文执行的更改包含在复制的上下文中。如果你需要执行一个协程怎么办?为了实现相同的行为,您应该做什么?

就我而言,我想要的是这样的东西来处理可能嵌套事务的事务上下文:

0 投票
1 回答
50 浏览

python - Google CloudFunctions:ContextVar 与 Global Var

Google Cloud Functions 中的 ContextVar 和 Global Var 之间有区别吗?

我注意到,当 Google 尝试重用 GCF 实例时,一些全局变量类从一个 GCF 调用重用到另一个 GCF 调用,而不是在每个 GCF 调用开始时初始化。我需要每个全局 var 类对于每个 GCF 调用都是唯一的。

每个 GCF 调用的 ContextVars 是唯一的吗?

目前我将这些全局变量分配给 None 并在之后重新初始化以确保每个类的新初始化

0 投票
2 回答
385 浏览

python - 如果我不重置 Python 的 ContextVars 会发生什么?

这是 Python 中的内存泄漏吗?

contextvar 是一个堆栈,你推的越多,它就会不断增长?

如果我从不打电话contextvar.reset(token)怎么办?

还是所有事情都通过引用计数来处理?

0 投票
2 回答
208 浏览

python - 在 asyncio add_done_callback 回调中访问上下文变量

在 Python 异步函数中,我正在创建 ContextVar、任务并将回调附加到它:

在回调中,我首先启动调试器:

在调试器中:

ContextVar 在那里,但我无法访问它。所以,我错过了一些东西,但找不到什么?

0 投票
1 回答
44 浏览

python - contextvar 默认值的工厂

将字典设置为ContextVar默认值:

...有点工作,因为字典将默认可用,但它总是引用相同的实例,而不是为每个上下文生成一个新实例。

上下文变量是否以某种方式支持工厂(用于字典、列表等),如:

还是我只需要手动完成:

0 投票
1 回答
395 浏览

python - 如果在异常后不重置,ContextVar 会在异步逻辑中泄漏内存吗?

如果我在异步网络服务器中有一个结构,例如

如果我不将其包装ContextVar在一个finally:块中并some_function_that_can_raise()引发异常,它会泄漏内存吗?
(没有这种情况,.reset()永远不会被调用)

.. 或者假设请求范围结束时该值将被销毁是否安全?
上游文档中的异步示例实际上根本不打扰.reset()
在这种情况下,.reset()这是多余的,因为它发生在上下文被清理之前。


为了添加更多上下文(ha),我最近正在学习 ContextVars,我假设是第二种情况。

local_ctx_var是唯一引用 Token ( from.set() ) 的名称,并且当请求范围结束时名称被删除,本地值应该成为垃圾收集的候选者,防止潜在的泄漏并使.reset()短期范围变得不必要(万岁)

..但我不确定,虽然有一些关于这个主题的非常有用的信息,但它稍微混淆了混合物

0 投票
1 回答
33 浏览

python - 直接在 contextvars.Context 中设置 var

我想在单独的contextvars.Context中调用一些函数,并在此上下文中由调用者设置一些变量:

这样回调和从中调用的任何代码都可以访问varvia并调用回调,并通过调用包装器,这是实现此功能的唯一方法还是我错过了什么(也许设计只需要以不同的方式做一些)?contextvars.copy_context()contextvars.ContextContextVar.set()context.runcontextvars

0 投票
1 回答
203 浏览

python - 在任务之间复制 contexvars.Context

我有一个程序(ASGI 服务器),其结构大致如下:

因为生命周期事件/端点在任务中运行,所以它们不能共享上下文变量。这是设计使然:任务在执行之前复制上下文,因此lifespan无法ctxvar正确设置。这是端点的期望行为,但我希望执行看起来像这样(从用户的角度来看):

换句话说,端点在它们自己的独立上下文中执行,但在生命周期的上下文中。

我试图通过使用来使它工作contextlib.copy_context()

也:

但是,这种方式似乎contextvars.Context.run不起作用(我猜上下文是在创建协程时绑定的,但不是在执行时绑定的)。

有没有一种简单的方法来实现所需的行为,而无需重新构建任务的创建方式等?

0 投票
3 回答
42 浏览

python - 在python中,两个函数调用一些相同的工作流,如何区分底部的源函数?

我有两个python函数A()和B(),它们都调用f1(),而f1()调用f2()......在f4()中,我想获取原始函数名称(A或B),有什么聪明的方法吗?我以为我可以为每个函数添加一个参数,但这使我的代码非常难看。这些函数在不同的文件中,有些在新线程中开始,我还阅读了一些关于上下文的文档,但我不确定它是否在这里有效。