Skip to content

Commit dddf7ce

Browse files
fix(medcat-service): Add thread safety to medcat processor dependency (#200)
1 parent 39dafaa commit dddf7ce

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

medcat-service/medcat_service/dependencies.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import threading
23
from functools import lru_cache
34
from typing import Annotated
45

@@ -13,14 +14,27 @@
1314
@lru_cache
1415
def get_settings() -> Settings:
1516
settings = Settings()
16-
log.debug("Using settings: %s", settings)
17+
log.info(f"Starting service using settings: '{settings}'")
1718
return settings
1819

1920

21+
_def_medcat_processor: tuple[Settings, MedCatProcessor] | None = None
22+
_def_medcat_processor_lock = threading.Lock()
23+
24+
25+
def get_medcat_processor_singleton(settings: Settings) -> MedCatProcessor:
26+
with _def_medcat_processor_lock:
27+
global _def_medcat_processor
28+
if _def_medcat_processor is None or _def_medcat_processor[0] != settings:
29+
log.info("Creating new MedCatProcessor using settings: %s", settings)
30+
_def_medcat_processor = (settings, MedCatProcessor(settings))
31+
return _def_medcat_processor[1]
32+
33+
2034
@lru_cache
2135
def get_medcat_processor(settings: Annotated[Settings, Depends(get_settings)]) -> MedCatProcessor:
22-
log.debug("Creating new Medcat Processsor using settings: %s", settings)
23-
return MedCatProcessor(settings)
36+
log.debug("Creating new medcat processor due to cache miss")
37+
return get_medcat_processor_singleton(settings)
2438

2539

2640
MedCatProcessorDep = Annotated[MedCatProcessor, Depends(get_medcat_processor)]

0 commit comments

Comments
 (0)