From 8f83679c487982581026154a1cb50483e3f4e186 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 20 Dec 2020 19:01:37 +0100 Subject: [PATCH] test cleaning tasks in a task fails: [2020-12-20 18:01:50,264: WARNING/ForkPoolWorker-7] Pruning UncloudTask object (571ffc76-8b40-4cb6-9658-87030834bc6c)... [2020-12-20 18:01:50,265: ERROR/ForkPoolWorker-7] Task uncloud.tasks.cleanup_tasks[f9fb1480-f122-41c9-bec1-3d6d0f92a22e] raised unexpected: RuntimeError('Never call result.get() within a task!\nSee http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks\n') Traceback (most recent call last): File "/home/nico/vcs/uncloud/venv/lib/python3.8/site-packages/celery/app/trace.py", line 405, in trace_task R = retval = fun(*args, **kwargs) File "/home/nico/vcs/uncloud/venv/lib/python3.8/site-packages/celery/app/trace.py", line 697, in __protected_call__ return self.run(*args, **kwargs) File "/home/nico/vcs/uncloud/uncloud/tasks.py", line 13, in cleanup_tasks print(res.get()) File "/home/nico/vcs/uncloud/venv/lib/python3.8/site-packages/celery/result.py", line 209, in get assert_will_not_block() File "/home/nico/vcs/uncloud/venv/lib/python3.8/site-packages/celery/result.py", line 37, in assert_will_not_block raise RuntimeError(E_WOULDBLOCK) RuntimeError: Never call result.get() within a task! See http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks --- uncloud/celery.py | 5 ----- uncloud/settings.py | 7 +++++++ uncloud/tasks.py | 14 ++++++++++++++ uncloud_net/tasks.py | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 uncloud/tasks.py diff --git a/uncloud/celery.py b/uncloud/celery.py index 7bcaaae..3408634 100644 --- a/uncloud/celery.py +++ b/uncloud/celery.py @@ -15,8 +15,3 @@ app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() - - -@app.task(bind=True) -def debug_task(self): - print(f'Request: {self.request!r}') diff --git a/uncloud/settings.py b/uncloud/settings.py index ea90c22..ae734dc 100644 --- a/uncloud/settings.py +++ b/uncloud/settings.py @@ -224,6 +224,13 @@ CELERY_TASK_ROUTES = { re.compile(r'.*.tasks.cdist.*'): { 'queue': 'cdist' } # cdist tasks go into cdist queue } +CELERY_BEAT_SCHEDULE = { + 'cleanup_tasks': { + 'task': 'uncloud.tasks.cleanup_tasks', + 'schedule': 10 + } +} + # CELERY_TASK_CREATE_MISSING_QUEUES = False # Overwrite settings with local settings, if existing diff --git a/uncloud/tasks.py b/uncloud/tasks.py new file mode 100644 index 0000000..8350354 --- /dev/null +++ b/uncloud/tasks.py @@ -0,0 +1,14 @@ +from celery import shared_task +from celery.result import AsyncResult + +from .models import UncloudTask + +@shared_task +def cleanup_tasks(): + print("Cleanup time") + for task in UncloudTask.objects.all(): + print(f"Pruning {task}...") + res = AsyncResult(id=str(task.task_id)) + if res.ready(): + print(res.get()) + task.delete() diff --git a/uncloud_net/tasks.py b/uncloud_net/tasks.py index 0dcf6f3..529c525 100644 --- a/uncloud_net/tasks.py +++ b/uncloud_net/tasks.py @@ -29,7 +29,7 @@ def configure_wireguard_server(wireguardvpnpool): log.info(f"Configuring VPN server {server} (async)") task_id = uuid.UUID(cdist_configure_wireguard_server.apply_async((config, server)).id) - UncloudTasks.objects.create(task_id=task_id) + UncloudTask.objects.create(task_id=task_id) @shared_task