contextvar 默认值的工厂
Factory for contextvar default value
将字典设置为 ContextVar
默认值:
var: ContextVar[dict] = ContextVar('var', default={})
...有点管用,因为字典默认可用,但它总是引用相同的实例,而不是为每个上下文生成一个新实例。
contextvars 是否以某种方式支持工厂(对于字典、列表等),如:
var: ContextVar[dict] = ContextVar('var', default=list)
var: ContextVar[dict] = ContextVar('var', default=lambda: dict())
还是我必须手动完成:
var: ContextVar[Optional[dict]] = ContextVar('var', default=None)
...
if not var.get():
var.set({})
显然 ContextVars 的设计选择是在提供低级、准系统、功能而非易用性的方向上。
没有简单的方法来获得上下文感知的命名空间,正如您打算通过将字典作为默认值来实现的那样。而且,默认值没有使用工厂而不是单个对象的选项。
克服这个问题的唯一方法是编写一个 class,在 contextvars(或其他上下文分离机制)之上提供更高级别的接口。
我正在开发这样一个包,虽然我还没有发布 - 主要目标是有一个 class 作为一个免费使用的命名空间,就像 threading.Local 实例。 (还有一个 class 使用映射界面)- 如果我有更多的人使用并提供一些反馈,我可以更快地完成表格:
将字典设置为 ContextVar
默认值:
var: ContextVar[dict] = ContextVar('var', default={})
...有点管用,因为字典默认可用,但它总是引用相同的实例,而不是为每个上下文生成一个新实例。
contextvars 是否以某种方式支持工厂(对于字典、列表等),如:
var: ContextVar[dict] = ContextVar('var', default=list)
var: ContextVar[dict] = ContextVar('var', default=lambda: dict())
还是我必须手动完成:
var: ContextVar[Optional[dict]] = ContextVar('var', default=None)
...
if not var.get():
var.set({})
显然 ContextVars 的设计选择是在提供低级、准系统、功能而非易用性的方向上。
没有简单的方法来获得上下文感知的命名空间,正如您打算通过将字典作为默认值来实现的那样。而且,默认值没有使用工厂而不是单个对象的选项。
克服这个问题的唯一方法是编写一个 class,在 contextvars(或其他上下文分离机制)之上提供更高级别的接口。
我正在开发这样一个包,虽然我还没有发布 - 主要目标是有一个 class 作为一个免费使用的命名空间,就像 threading.Local 实例。 (还有一个 class 使用映射界面)- 如果我有更多的人使用并提供一些反馈,我可以更快地完成表格: