【问题标题】:pydantic Settings: TypeError: cannot pickle '_thread.lock' objectpydantic 设置:TypeError:无法腌制“_thread.lock”对象
【发布时间】:2021-05-30 19:54:30
【问题描述】:

我遇到了pydantic.BaseSettingsprometheus_client.Summary 的问题。 下面的sn-p在尝试执行的时候抛出异常:

from prometheus_client import Summary
from pydantic import BaseSettings

class Settings(BaseSettings):
    app_name: str = 'any_app_name'
    any_boolean: bool = False
    any_summary: Summary = Summary('my_summary','My Summary')

s = Settings()

堆栈跟踪来了:

  File "/Users/XXX/workspace/src/settings_summary.py", line 4, in <module>
    class Settings(BaseSettings):
  File "pydantic/main.py", line 252, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/fields.py", line 309, in pydantic.fields.ModelField.infer
  File "pydantic/fields.py", line 271, in pydantic.fields.ModelField.__init__
  File "pydantic/fields.py", line 344, in pydantic.fields.ModelField.prepare
  File "pydantic/fields.py", line 368, in pydantic.fields.ModelField._set_default_and_type
  File "pydantic/fields.py", line 280, in pydantic.fields.ModelField.get_default
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 172, in deepcopy
    y = _reconstruct(x, memo, *rv)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 270, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 146, in deepcopy
    y = copier(x, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 230, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/copy.py", line 161, in deepcopy
    rv = reductor(4)
TypeError: cannot pickle '_thread.lock' object

当删除Summary 行代码运行时:

from pydantic import BaseSettings

class Settings(BaseSettings):
    app_name: str = 'any_app_name'
    any_boolean: bool = False

s = Settings()

你知道如何解决它吗?

提前非常感谢...

【问题讨论】:

    标签: python prometheus pydantic


    【解决方案1】:

    看起来你想创建Custom Data Type

    【讨论】:

    • class Config: absolute_types_allowed = True 被提到是一种允许模型中自定义类型的方法,BaseSettings 有它。然而,Pydantic 因上述错误而失败。我不明白...
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2017-12-18
    • 2021-05-16
    • 2019-05-11
    • 2017-12-04
    • 2019-10-20
    • 2018-04-14
    • 2019-01-21
    相关资源
    最近更新 更多