问题标签 [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.
python - 了解 Python 上下文变量
关于以下SO 答案。为了了解使用 Contextvars 和不使用 Contextvars 之间的区别,我进行了一些更改。
我希望在某些时候变量myid
会损坏,但是将范围更改为更高的数字似乎根本没有影响。
结果
我应该改变什么才能看到变量的意外行为myid
?
python - 如何在上下文中运行协程?
在关于 Context Vars 的 Python 文档中,描述了一个 Context::run 方法以启用在上下文中执行可调用对象,因此可调用对象对上下文执行的更改包含在复制的上下文中。如果你需要执行一个协程怎么办?为了实现相同的行为,您应该做什么?
就我而言,我想要的是这样的东西来处理可能嵌套事务的事务上下文:
python - Google CloudFunctions:ContextVar 与 Global Var
Google Cloud Functions 中的 ContextVar 和 Global Var 之间有区别吗?
我注意到,当 Google 尝试重用 GCF 实例时,一些全局变量类从一个 GCF 调用重用到另一个 GCF 调用,而不是在每个 GCF 调用开始时初始化。我需要每个全局 var 类对于每个 GCF 调用都是唯一的。
每个 GCF 调用的 ContextVars 是唯一的吗?
目前我将这些全局变量分配给 None 并在之后重新初始化以确保每个类的新初始化
python - 如果我不重置 Python 的 ContextVars 会发生什么?
这是 Python 中的内存泄漏吗?
contextvar 是一个堆栈,你推的越多,它就会不断增长?
如果我从不打电话contextvar.reset(token)
怎么办?
还是所有事情都通过引用计数来处理?
python - 在 asyncio add_done_callback 回调中访问上下文变量
在 Python 异步函数中,我正在创建 ContextVar、任务并将回调附加到它:
在回调中,我首先启动调试器:
在调试器中:
ContextVar 在那里,但我无法访问它。所以,我错过了一些东西,但找不到什么?
python - contextvar 默认值的工厂
将字典设置为ContextVar
默认值:
...有点工作,因为字典将默认可用,但它总是引用相同的实例,而不是为每个上下文生成一个新实例。
上下文变量是否以某种方式支持工厂(用于字典、列表等),如:
还是我只需要手动完成:
python - 如果在异常后不重置,ContextVar 会在异步逻辑中泄漏内存吗?
如果我在异步网络服务器中有一个结构,例如
如果我不将其包装ContextVar
在一个finally:
块中并some_function_that_can_raise()
引发异常,它会泄漏内存吗?
(没有这种情况,.reset()
永远不会被调用)
.. 或者假设请求范围结束时该值将被销毁是否安全?
上游文档中的异步示例实际上根本不打扰.reset()
它!
在这种情况下,.reset()
这是多余的,因为它发生在上下文被清理之前。
为了添加更多上下文(ha),我最近正在学习 ContextVars,我假设是第二种情况。
local_ctx_var
是唯一引用 Token ( from.set()
) 的名称,并且当请求范围结束时名称被删除,本地值应该成为垃圾收集的候选者,防止潜在的泄漏并使.reset()
短期范围变得不必要(万岁)
..但我不确定,虽然有一些关于这个主题的非常有用的信息,但它稍微混淆了混合物
- 如果我不重置 Python 的 ContextVars 会发生什么?(暗示它会像人们期望的那样被 GC 处理)
- Python 中的上下文变量(显式使用
finally:
)
python - 直接在 contextvars.Context 中设置 var
我想在单独的contextvars.Context中调用一些函数,并在此上下文中由调用者设置一些变量:
这样回调和从中调用的任何代码都可以访问var
via并调用回调,并通过调用该包装器,这是实现此功能的唯一方法还是我错过了什么(也许设计只需要以不同的方式做一些)?contextvars.copy_context()
contextvars.Context
ContextVar.set()
context.run
contextvars
python - 在任务之间复制 contexvars.Context
我有一个程序(ASGI 服务器),其结构大致如下:
因为生命周期事件/端点在任务中运行,所以它们不能共享上下文变量。这是设计使然:任务在执行之前复制上下文,因此lifespan
无法ctxvar
正确设置。这是端点的期望行为,但我希望执行看起来像这样(从用户的角度来看):
换句话说,端点在它们自己的独立上下文中执行,但在生命周期的上下文中。
我试图通过使用来使它工作contextlib.copy_context()
:
也:
但是,这种方式似乎contextvars.Context.run
不起作用(我猜上下文是在创建协程时绑定的,但不是在执行时绑定的)。
有没有一种简单的方法来实现所需的行为,而无需重新构建任务的创建方式等?
python - 在python中,两个函数调用一些相同的工作流,如何区分底部的源函数?
我有两个python函数A()和B(),它们都调用f1(),而f1()调用f2()......在f4()中,我想获取原始函数名称(A或B),有什么聪明的方法吗?我以为我可以为每个函数添加一个参数,但这使我的代码非常难看。这些函数在不同的文件中,有些在新线程中开始,我还阅读了一些关于上下文的文档,但我不确定它是否在这里有效。