相关疑难解决方法(0)

报告产生了长期运行的Celery任务的结果

问题

我已将长时间运行的任务分段为逻辑子任务,因此我可以在完成时报告每个子任务的结果.但是,我正在尝试报告一个有效永远无法完成的任务的结果(而不是随着时间的推移产生值),并且我正在努力使用现有的解决方案.

背景

我正在为我编写的一些Python程序构建一个Web界面.用户可以通过Web表单提交作业,然后回来查看作业的进度.

假设我有两个函数,每个函数都通过不同的形式访问:

  • med_func:执行约1分钟,结果传递给render(),产生额外的数据.
  • long_func:返回一个生成器.每个yield大约30分钟,应该报告给用户.收益率如此之多,我们可以将此迭代器视为无限(仅在撤销时终止).

代码,当前实现

med_func,我报告结果如下:

在表单提交上,我保存AsyncResultDjango会话:

    task_result = med_func.apply_async([form], link=render.s())
    request.session["task_result"] = task_result
Run Code Online (Sandbox Code Playgroud)

结果页面的Django视图访问它AsyncResult.任务完成后,结果将保存到作为上下文传递给Django模板的对象中.

def results(request):
    """ Serve (possibly incomplete) results of a session's latest run. """
    session = request.session

    try:  # Load most recent task
        task_result = session["task_result"]
    except KeyError:  # Already cleared, or doesn't exist
        if "results" not in session:
            session["status"] = "No job submitted"
    else:  # Extract …
Run Code Online (Sandbox Code Playgroud)

python django celery

23
推荐指数
3
解决办法
7229
查看次数

标签 统计

celery ×1

django ×1

python ×1