从django视图运行时,完成子任务后卡住的主要dask任务

问题描述 投票:1回答:1

我有一个django视图,应该尽快提交任务。此任务的作用范围是解压缩模型的文件字段,然后运行一些需要将解压缩的文件路径作为参数的其他任务。

以下代码不是真正的代码,但是在这个极简示例中,我也遇到同样的问题。

在django视图中运行主要任务的代码非常简单,因为这简直就是一发不可收拾:

dask_client = Client("tcp://scheduler:8786")
fire_and_forget(dask_client.submit(unzip_then_run, object))

unzip_then_run代码是在instructions之后生成的>>

def unzip_then_run_basic(dump, es_url):
    dask_client = get_client()
    secede()
    tasks = []
    for i in range(10):
        task = dask_client.submit(run_basic, i)
        tasks.append(task)
    results = dask_client.gather(taks)
    rejoin()

最终的子任务代码是:

def run_basic(random):
    time.sleep(random * 2)
    return 0

一切正常,直到rejoin()为止,子任务成功结束,但是什么也没发生。一切似乎都在等待,我的工作日志上没有信息或问题:

enter image description here

之所以需要等待子任务,是因为我想以完成状态更新模型。如果我在主要任务中也使用fire_and_forget,则一切正常,但我不容易知道任务何时完成。

所有代码都在使用dask-docker和django docker映像的docker-compose环境中运行。如果我从django docker镜像运行以下测试代码,但作为脚本,一切正常。

import sys
import os
import django

sys.path.insert(0, "/app")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
django.setup()

from website.models import Object
from dask.distributed import Client, fire_and_forget
from symbols.test.dask_util import unzip_then_run


object = Object.objects.get(pk=49)
dask_client = Client("tcp://scheduler:8786")
fire_and_forget(dask_client.submit(unzip_then_run, object))

从django视图运行代码时,我需要注意些什么?

我有一个django视图,应该尽快提交任务。此任务的作用范围是解压缩模型的文件字段,然后运行其他一些需要将解压缩的文件路径作为参数的任务。 ...

django docker dask dask-distributed
1个回答
0
投票

从django视图运行代码时,我需要注意些什么?

© www.soinside.com 2019 - 2024. All rights reserved.