Remove lock usage entirely to fix pickling issues

Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
Devin AI
2025-05-06 00:20:18 +00:00
parent 171f8b63fd
commit 79547fba25

View File

@@ -1,5 +1,4 @@
import os import os
import threading
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from pathlib import Path from pathlib import Path
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
@@ -30,7 +29,6 @@ class BaseFileKnowledgeSource(BaseKnowledgeSource, ABC):
""" """
_logger: Logger = Logger(verbose=True) _logger: Logger = Logger(verbose=True)
_lock = threading.Lock() # Thread-safe lock for file operations
file_path: Optional[Union[Path, List[Path], str, List[str]]] = Field( file_path: Optional[Union[Path, List[Path], str, List[str]]] = Field(
default=None, default=None,
@@ -161,35 +159,32 @@ class BaseFileKnowledgeSource(BaseKnowledgeSource, ABC):
previously recorded timestamps to detect changes. When a file has been modified, previously recorded timestamps to detect changes. When a file has been modified,
it logs the change and returns True to trigger a reload. it logs the change and returns True to trigger a reload.
Thread-safe: Uses a lock to prevent concurrent modifications.
Returns: Returns:
bool: True if any file has been modified, False otherwise. bool: True if any file has been modified, False otherwise.
""" """
with self._lock: for path in self.safe_file_paths:
for path in self.safe_file_paths: try:
try: if not path.exists():
if not path.exists(): self._logger.log("warning", f"File {path} no longer exists.")
self._logger.log("warning", f"File {path} no longer exists.") continue
continue
if not path.is_file(): if not path.is_file():
self._logger.log("warning", f"Path {path} is not a file.") self._logger.log("warning", f"Path {path} is not a file.")
continue continue
if not os.access(path, os.R_OK): if not os.access(path, os.R_OK):
self._logger.log("warning", f"File {path} is not readable.") self._logger.log("warning", f"File {path} is not readable.")
continue continue
current_mtime = path.stat().st_mtime current_mtime = path.stat().st_mtime
if path not in self._file_mtimes or current_mtime > self._file_mtimes[path]: if path not in self._file_mtimes or current_mtime > self._file_mtimes[path]:
self._logger.log("info", f"File {path} has been modified. Reloading data.") self._logger.log("info", f"File {path} has been modified. Reloading data.")
return True return True
except PermissionError as e: except PermissionError as e:
self._logger.log("error", f"Permission error when checking file {path}: {str(e)}") self._logger.log("error", f"Permission error when checking file {path}: {str(e)}")
except IOError as e: except IOError as e:
self._logger.log("error", f"IO error when checking file {path}: {str(e)}") self._logger.log("error", f"IO error when checking file {path}: {str(e)}")
except Exception as e: except Exception as e:
self._logger.log("error", f"Unexpected error when checking file {path}: {str(e)}") self._logger.log("error", f"Unexpected error when checking file {path}: {str(e)}")
return False return False