config.safe_writer ================== .. py:module:: config.safe_writer .. autoapi-nested-parse:: 从 https://github.com/untitaker/python-atomicwrites 修改而来 .. code-block:: text :caption: 原始版权声明 Copyright (c) 2015-2016 Markus Unterwaditzer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. versionadded:: 0.2.0 Attributes ---------- .. autoapisummary:: config.safe_writer.FileLocks config.safe_writer.GlobalModifyLock Classes ------- .. autoapisummary:: config.safe_writer.LockFlags config.safe_writer.SafeOpen Functions --------- .. autoapisummary:: config.safe_writer.acquire_lock config.safe_writer.release_lock config.safe_writer.safe_open Module Contents --------------- .. py:class:: LockFlags Bases: :py:obj:`enum.IntEnum` 文件锁标志 Initialize self. See help(type(self)) for accurate signature. .. py:attribute:: EXCLUSIVE .. py:attribute:: SHARED .. py:class:: SafeOpen(io_manager: ABCTempIOManager[Any], timeout: float | None = 1, flag: LockFlags = LockFlags.EXCLUSIVE) 安全的打开文件 :param io_manager: IO管理器 :type io_manager: ABCTempIOManager :param timeout: 超时时间 :type timeout: float | None :param flag: 锁标志 :type flag: LockFlags .. py:method:: open_file(file: F) -> collections.abc.Generator[F | None, Any, None] 打开文件 (上下文管理器) :param file: 文件对象 :type file: IO :return: 返回值为IO对象的上下文管理器 :rtype: Generator[F | None, Any, None] .. py:method:: open_path(path: str | pathlib.Path, mode: str) -> collections.abc.Generator[F | None, Any, None] 打开路径 (上下文管理器) :param path: 文件路径 :type path: str | pathlib.Path :param mode: 打开模式 :type mode: str :return: 返回值为IO对象的上下文管理器 :return: 上下文管理器 :rtype: Generator[F | None, Any, None] .. py:attribute:: _flag .. py:attribute:: _manager .. py:attribute:: _timeout :value: 1 .. py:function:: acquire_lock(file: AIO, flags: LockFlags, *, timeout: numbers.Real | None = 1, immediately_release: bool = False) -> None 获取文件锁 :param file: 文件对象 :type file: IO :param flags: 锁类型 :type flags: LockFlags :param timeout: 超时时间 :type timeout: Real | None :param immediately_release: 是否立即释放锁 :type immediately_release: bool .. py:function:: release_lock(file: AIO) -> None 释放文件锁 :param file: 文件对象 :type file: IO .. py:function:: safe_open(path: str | pathlib.Path, mode: _typeshed.OpenBinaryMode, *, timeout: float | None = 1, flag: LockFlags = LockFlags.EXCLUSIVE, io_manager: ABCTempIOManager[Any] | None = None, **manager_kwargs: Any) -> contextlib.AbstractContextManager[IO[bytes]] safe_open(path: str | pathlib.Path, mode: _typeshed.OpenTextMode, *, timeout: float | None = 1, flag: LockFlags = LockFlags.EXCLUSIVE, io_manager: ABCTempIOManager[Any] | None = None, **manager_kwargs: Any) -> contextlib.AbstractContextManager[IO[str]] 安全打开文件 :param path: 文件路径 :type path: str | pathlib.Path :param mode: 打开模式 :type mode: str :param timeout: 超时时间 :type timeout: float | None :param flag: 锁类型 :type flag: LockFlags :param io_manager: 临时文件管理器 :type io_manager: ABCTempIOManager | None :param manager_kwargs: 临时文件管理器参数 :type manager_kwargs: dict :return: 返回IO对象的上下文管理器 :rtype: ContextManager[IO | TextIO] .. py:data:: FileLocks :type: weakref.WeakValueDictionary[str, threading.Lock] 存储文件名对应的锁 .. py:data:: GlobalModifyLock 防止修改 ``FileLocks`` 时发生竞态条件