代码之家  ›  专栏  ›  技术社区  ›  Kotlinboy

在芹菜码头完成作业,但“任务”。ready()`返回false(Django)

  •  0
  • Kotlinboy  · 技术社区  · 7 年前

    我有以下芹菜任务:

    @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', {})
    

    这是在我的URL中。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

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

    [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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Kotlinboy    7 年前

    似乎还有许多其他人面临着这个问题,因此没有任何答案或解决方案。

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

    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'
    

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