轮询芹菜任务并返回显示

时间:2016-12-16 06:50:23

标签: python django celery

我是芹菜的新手。我关注this example

Views.py

def results(request):
    documents = Document.objects.all()
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.cleaned_data['name']
            print 'data', data
            newdoc = Document(docfile=request.FILES['docfile'])
            newdoc.save()
        #send it to celery  
    documents = Document.objects.all()
    return render_to_response(
        'results.html',
        {'documents' : documents}, context_instance=RequestContext(request))

用户将上传将由引擎处理的文件。在此期间,我希望结果页面显示已完成的所有作业。我想过使用celery并修改tasks.py来处理文件。完成后,该文件将显示为用户下载它的URL。

我想不出一种方法来异步轮询这个任务来实现这个部分。 谢谢。

1 个答案:

答案 0 :(得分:8)

您可以使用Django-celery-results。它是芹菜的一个简单而好的扩展,使您能够将任务结果存储在django数据库中。 使用以下命令安装扩展程序:

SELECT concat(hour(sec_to_time(time_milis)), ' ', sec_to_time(time_milis))
FROM (
  SELECT SUM(TIMEDIFF(logout_timestamp,login_timestamp)) AS time_milis FROM t_access_log WHERE logout_timestamp!='0000-00-00 00:00:00' GROUP BY login_id
)se

更新settings.py:

$ pip install -U django-celery-results

通过执行数据库迁移来创建Celery数据库表:

CELERY_RESULT_BACKEND = 'django-db'

INSTALLED_APP = (
    ...
    ...
    django_celery_results
)

然后,您可以从数据库中获取已完成任务的列表,并将其显示在视图中。

$ python manage.py migrate django_celery_results

定义模板“templates / tasks.html”

from django_celery_results.models import TaskResult
def tasks_view(request):
    tasks = TaskResult.objects.all()
    template = "tasks.html" 
    return render(request, template, {'tasks': tasks})