Skip to content

Commit 9fb83d7

Browse files
committed
Constant for DEFAULT_RUNNER_LOOP_DELAY, admin action to mark ready for deletion
1 parent 053a508 commit 9fb83d7

File tree

5 files changed

+23
-9
lines changed

5 files changed

+23
-9
lines changed

src/dbtasks/admin.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib import admin
22
from django.tasks import TaskResultStatus
3+
from django.utils import timezone
34

45
from .models import ScheduledTask
56

@@ -22,8 +23,13 @@ class ScheduledTaskAdmin(admin.ModelAdmin):
2223
"queue",
2324
"backend",
2425
]
25-
actions = ["run_task"]
26+
actions = ["mark_ready", "mark_deletion"]
27+
ordering = ["-enqueued_at"]
2628

2729
@admin.action(description="Mark ready to run now")
28-
def run_task(self, request, queryset):
30+
def mark_ready(self, request, queryset):
2931
queryset.update(status=TaskResultStatus.READY, run_after=None)
32+
33+
@admin.action(description="Mark ready for deletion")
34+
def mark_deletion(self, request, queryset):
35+
queryset.update(delete_after=timezone.now())

src/dbtasks/contrib/serve/management/commands/serve.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from django.core.management import BaseCommand
99
from django.tasks import DEFAULT_TASK_BACKEND_ALIAS
1010

11+
from dbtasks.defaults import DEFAULT_RUNNER_LOOP_DELAY
12+
1113
try:
1214
from granian import Granian
1315
from granian.constants import Interfaces
@@ -80,8 +82,8 @@ def add_arguments(self, parser):
8082
parser.add_argument(
8183
"--delay",
8284
type=float,
83-
default=1.0,
84-
help="Task runner loop delay [default=1.0]",
85+
default=DEFAULT_RUNNER_LOOP_DELAY,
86+
help=f"Task runner loop delay [default={DEFAULT_RUNNER_LOOP_DELAY}]",
8587
)
8688
parser.add_argument(
8789
"--no-periodic",

src/dbtasks/defaults.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# How often a runner should poll the database for new tasks.
2+
DEFAULT_RUNNER_LOOP_DELAY = 1.0

src/dbtasks/management/commands/taskrunner.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.core.management import BaseCommand, CommandParser
55
from django.tasks import DEFAULT_TASK_BACKEND_ALIAS
66

7+
from dbtasks.defaults import DEFAULT_RUNNER_LOOP_DELAY
78
from dbtasks.runner import Runner
89

910

@@ -38,8 +39,8 @@ def add_arguments(self, parser: CommandParser):
3839
parser.add_argument(
3940
"--delay",
4041
type=float,
41-
default=1.0,
42-
help="Loop delay [default=1.0]",
42+
default=DEFAULT_RUNNER_LOOP_DELAY,
43+
help=f"Loop delay [default={DEFAULT_RUNNER_LOOP_DELAY}]",
4344
)
4445
parser.add_argument(
4546
"--no-periodic",

src/dbtasks/runner.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from django.utils.module_loading import import_string
2121

2222
from .backend import DatabaseBackend
23+
from .defaults import DEFAULT_RUNNER_LOOP_DELAY
2324
from .models import ScheduledTask
2425
from .periodic import Periodic
2526

@@ -51,7 +52,7 @@ def __init__(
5152
workers: int = 4,
5253
worker_id: str | None = None,
5354
backend: str = DEFAULT_TASK_BACKEND_ALIAS,
54-
loop_delay: float = 1.0,
55+
loop_delay: float = DEFAULT_RUNNER_LOOP_DELAY,
5556
init_periodic: bool = True,
5657
):
5758
self.workers = workers
@@ -217,13 +218,15 @@ def delete_tasks(self):
217218
"""
218219
Deletes any finished tasks scheduled for deletion before now.
219220
"""
220-
return ScheduledTask.objects.filter(
221+
deleted = ScheduledTask.objects.filter(
221222
delete_after__lt=timezone.now(),
222223
status__in=[TaskResultStatus.SUCCESSFUL, TaskResultStatus.FAILED],
223224
# TODO: allow runner to specify which backend/queues to process
224225
backend=self.backend.alias,
225226
queue__in=self.backend.queues,
226-
).delete()
227+
).delete()[0]
228+
if deleted:
229+
logger.debug(f"Removed {deleted} completed task(s)")
227230

228231
def init_periodic(self):
229232
"""

0 commit comments

Comments
 (0)