获取芹菜AsyncResult的任务名称

时间:2017-01-25 19:00:59

标签: python celery

我正在使用celery来执行我的异步任务,而我正在尝试实现的是在我执行它之后获取工作流程中每个任务的名称和id。

        exec_workflow = chain(
            task1.si(),
            task2.si(),
            task3.si()
    )

    result = exec_workflow.apply_async()

    tasks = []
    for t in result._parents():
        tasks.append({"id": t.id, "name": t.name})

但似乎AsyncResult因某些奇怪的原因没有name属性。关于做什么的合适方法的任何想法?

另一种方法可能是在执行apply_async之前强制执行每个任务的id,这样可以解决我的问题,因为我可以将id与任务名称匹配。但我不确定它是否可能。

感谢。

2 个答案:

答案 0 :(得分:1)

不是最好的解决方案,但它可以工作。

@section AddToHead{
<link rel="stylesheet" href="~/css1/bootstrap-3.1.1.min.css" type="text/css" />
<link rel="stylesheet" href="~/css1/bootstrap-multiselect.css" type="text/css" />
<script type="text/javascript" src="https://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="~/js1/bootstrap-2.3.2.min.js"></script>
<script type="text/javascript" src="~/js1/bootstrap-multiselect.js"></script>
}
<form class="column" asp-controller="group"  asp-action="createresult" style="height:100%;" method="post">
  <span class="column" style="height:50px;">
        @Html.ListBoxFor(x => x.AvailablePlayers, Model.AvailablePlayers, new { id = "PlayersTeamA", onChange = "getSelectedOptions(this)", multiple = "multiple" })
        @Html.ValidationMessageFor(model => model.TeamOnePlayers)

    </span>
     <span class="column">
        @Html.ListBoxFor(x => x.AvailablePlayers, Model.AvailablePlayers, new { id = "PlayersTeamB", onChange = "getSelectedOptions(this)", multiple = "multiple" })
        @Html.ValidationMessageFor(model => model.TeamTwoPlayers)

    </span>

   </form>

    </div>
        @section Scripts {



<script type="text/javascript">
    $(function () {
        $('#PlayersTeamA').multiselect({
            includeSelectAllOption: true
        });
        $('#PlayersTeamB').multiselect({
            includeSelectAllOption: true
        });

      
    });

    function getSelectedOptions(sel) {
        var idddl = sel.id;
       
        var opts = [],
            opt;
        var len = sel.options.length;
        for (var i = 0; i < len; i++) {
            opt = sel.options[i];

            if (opt.selected) {
                opts.push(opt);
                var idul = sel.id;
                alert(idul);
                var ul = document.getElementById(idul);
                ul.removeChild(ul.childNodes[1]);



               
              

            }
        }

        return opts;
    }

答案 1 :(得分:-5)

好吧,我已经解决了我的问题。我最终做的只是设置每个任务的id属性。