我有一个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()为止,子任务成功结束,但是什么也没发生。一切似乎都在等待,我的工作日志上没有信息或问题:
之所以需要等待子任务,是因为我想以完成状态更新模型。如果我在主要任务中也使用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视图运行代码时,我需要注意些什么?