【问题标题】:Print immediately Task Id of a programmed Task in Celery for Python立即打印 Celery for Python 中已编程任务的任务 ID
【发布时间】:2019-12-31 07:08:24
【问题描述】:

当我在 Django 中从我的视图中发送一个已编程的任务时,如果我需要立即撤销,我需要立即获取 task.id。

比如我的看法:

@login_required
def program_task(request, pk):
    member = get_object_or_404(Post_Blog, pk=pk)
    if request.method == "POST":
        form = PostProgrammaForm(request.POST)
        if form.is_valid():
            action = form.save(commit=False)
            action.account_id = member.pk
            action.programmed = 1
            year= action.dataprogrammato.year
            month= action.dataprogrammato.month
            day= action.dataprogrammato.day
            hourz = action.oraprogrammato.hour
            hour= oraz - 2 ##this is for timezone :D
            minute= action.oraprogrammato.minute
            quando = datetime(year, month, day, hour, minute)
            action.save()

            if action.programmed == True:
                tasksend.apply_async(args=(action.id), eta=quando)
                ### here it send task and work, but I need to know here the task.id
            return redirect('blog_action', pk=member.pk)
    else:
        form = PostProgrammaForm(request.POST)
    return render(request, 'FBIsystem/post_program.html', {'form': form, 'member':member})

现在,我的 celery py 是这样的:

app = Celery()
@app.task(bind=True)
def tasksend(self, action_id):
    ###do somethig

一切正常,我保存表单并发送任务,但是...... 如果我为明天编写一个帖子并且我需要在它运行之前撤销任务我该怎么办?

请帮忙 谢谢

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    apply_async 返回一个celery.result.AsyncResult 的任务实例,它有id

    task = tasksend.apply_async(args=(action.id), eta=quando)
    print(task.id)
    

    【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2011-03-19
    • 2017-09-25
    • 2019-02-05
    • 2014-06-13
    • 2017-09-02
    • 2018-02-11
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多