feat: add task time limit settings, hard time limit

This commit is contained in:
Felix Spöttel
2023-06-28 09:44:27 +02:00
parent 78a38e6ec0
commit f323b06230
4 changed files with 17 additions and 6 deletions

View File

@@ -4,6 +4,9 @@ from app.shared.settings import settings
def get_celery_binding() -> Celery:
celery = Celery()
celery.conf.broker_url = settings.BROKER_URL
celery = Celery(
broker_url=settings.BROKER_URL,
broker_connection_retry=False,
broker_connection_retry_on_startup=False,
)
return celery

View File

@@ -8,6 +8,9 @@ class Settings(BaseSettings):
DATABASE_URI: str
ENVIRONMENT: str
TASK_SOFT_TIME_LIMIT: int = 3 * 60 * 60
TASK_HARD_TIME_LIMIT: int = 4 * 60 * 60
# derived settings
BROKER_URL: str
@@ -17,4 +20,4 @@ if "pytest" in sys.modules:
_env_file=".env.test", _env_file_encoding="utf-8"
) # type: ignore
else:
settings = Settings()
settings = Settings() # type: ignore

View File

@@ -103,7 +103,7 @@ def get_transcripts(
"/jobs/{id}",
response_model=schemas.Job,
responses={404: {"model": DetailResponse, "description": "Not found"}},
summary="Get metadata for one jobs",
summary="Get metadata for one job",
)
def get_transcript(
id: UUID = Path(), session: Session = Depends(get_session)

View File

@@ -9,6 +9,7 @@ import app.shared.db.models as models
import app.shared.db.schemas as schemas
from app.shared.celery import get_celery_binding
from app.shared.db.base import SessionLocal
from app.shared.settings import settings
from app.worker.strategies.local import LocalStrategy
celery = get_celery_binding()
@@ -20,7 +21,6 @@ class TranscribeTask(Task):
def __init__(self) -> None:
super().__init__()
# currently only `LocalStrategy` is implemented.
# TODO: implement remote processing strategy.
self.strategy: Optional[LocalStrategy] = None
def __call__(self, *args: Any, **kwargs: Any) -> Any:
@@ -30,7 +30,12 @@ class TranscribeTask(Task):
return self.run(*args, **kwargs)
@celery.task(base=TranscribeTask, bind=True, soft_time_limit=2 * 60 * 60)
@celery.task(
base=TranscribeTask,
bind=True,
soft_time_limit=settings.TASK_SOFT_TIME_LIMIT,
time_limit=settings.TASK_HARD_TIME_LIMIT,
)
def transcribe(self: Task, job_id: UUID) -> None:
try:
# runs in a separate thread => requires sqlite's WAL mode to be enabled.