在Celery终端完成工作,但`task.ready()`返回false(Django)

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

我在芹菜中有以下任务:

@shared_task
def convert_to(audio_file_pk):
     file_obj = AudioFile.objects.get(pk=audio_file_pk)
     print("Tsk Run: Returning {}".format(file_obj.audio_file.path))
     return(file_obj.audio_file.path)

我在我的主视图中有以下文件上传文件:

def model_form_upload(request, pk=None):
    if request.method == 'POST':
        form = AudioForm(request.POST, request.FILES)
        if form.is_valid():
            obj = form.save()
            task = convert_to.apply_async(args=[obj.pk])
            return render(request, 'index.html', {
            'form': form, 'task_id' : task.task_id
            })
            #return redirect('home', args=[obj.pk])
    else:
        form = AudioForm()
        return render(request, 'index.html', {
        'form': form
        })

我的Ajax视图中有以下代码:

def ajax_view(request, task_id):
    results = convert_to.AsyncResult(task_id)
    print(results.ready())
    print(task_id)
    if results.ready():
        return render_to_response('download_ready.html',
                                  {'results': results.get()})
    return render_to_response('not_ready.html', {})

这是在我的urls.py中

url(r'^result/(?P<task_id>.*)$', views.ajax_view, name='result')

这是我在芹菜中的任务的结果:

[2017-12-16 09:08:38,534: INFO/MainProcess] Received task: nightcore.tasks.convert_to_nightcore[cd1b19fd-f721-4fa1-b9db-1ce01738d030]  
[2017-12-16 09:08:38,536: INFO/ForkPoolWorker-2] Task nightcore.tasks.convert_to_nightcore[cd1b19fd-f721-4fa1-b9db-1ce01738d030] succeeded in 0.00173856299989s: '/home/student/PycharmProjects/tonightcore/media/uploads/The_Skeptic_in_the_Room-OPs_j1EEplI_3O4k7JT.mp3'

任务打印出应该打印的值。

print(results.ready())打印False

这是我的Ajax视图中print(task_id)的打印输出值:

[16/Dec/2017 09:11:19] "GET /result/cd1b19fd-f721-4fa1-b9db-1ce01738d030 HTTP/1.1" 200 22
cd1b19fd-f721-4fa1-b9db-1ce01738d030

你可以看到值是相同的,但当我查询http://127.0.0.1:8000/result/cd1b19fd-f721-4fa1-b9db-1ce01738d030时,它返回not_ready.html,而它应该返回download_ready.html

django asynchronous celery task-queue background-task
1个回答
0
投票

似乎还有很多其他人在没有任何答案或解决方案的情况下面临这个问题。

我在这里找到了解决方案。

https://github.com/celery/celery/issues/3675

我卸载了librabbitmq

$ # call this command many times, until it says it's not installed
$ pip uninstall librabbitmq

然后将经纪人改为pyamqp

CELERY_BROKER_URL = 'pyamqp://localhost'

这解决了它。现在我可以得到结果。

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