Django Celery Task 如何知道它运行了?

jas*_*son 0 django django-celery

我对 Django Celery 有以下任务(使用 Amazon SQS)。

@task
def upload_task(request, **kwargs):
    file = request.FILES['file']
    ContactCSVModel.import_from_file(file)
    return True
Run Code Online (Sandbox Code Playgroud)

这似乎有效,即文件已成功添加到我的数据库中,但我不确定它是否使用 Celery。我怎么知道这是否有效。我应该看点什么吗?在终端我跑了...

manage.py celery worker --loglevel=info,它指出我有一个名为 的任务contacts.tasks.upload_task,但我从未看到任何事情发生,它只是指出...

[2013-03-14 20:52:47,947:INFO/MainProcess]消费者:连接到 sqs://AJSUQJZKNSJA81JM@localhost//

知道我的任务是否已运行并完成(是的,我知道它已完成,因为它在数据库中,但是通过 Celery 实现的吗?)

这是任务运行的地方

视图.py

@login_required
def upload(request):
    # If we had a POST then get the request post values.
    if request.method == 'POST':
        form = ContactUploadForm(request.POST, request.FILES)
        # Check we have valid data
        if form.is_valid():
            upload_task(request)
            #file = request.FILES['file']
            #ContactCSVModel.import_from_file(file)
            messages.add_message(request, messages.SUCCESS, 'Items have been added')
        else:
            messages.add_message(request, messages.ERROR, ' Cannot upload CSV file.')

            return render_to_response('contacts/home.html', context_instance=RequestContext(request))
    else:
        form = ContactUploadForm()
        # Do this part no matter the outcome above.
    context = {'form': form}
    return render_to_response('contacts/home.html', context, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

就像我说的,这可以将 csv 数据加载到数据库中,但我认为 Celery 没有做任何事情。

这是我的芹菜设置......

# Celery
BROKER_TRANSPORT_OPTIONS = {'queue_name_prefix': 'celery-'}
BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'eu-west-1',
    }
BROKER_USER = 'xyz'
BROKER_PASSWORD = 'xyz'
Run Code Online (Sandbox Code Playgroud)

Ben*_*ite 5

您在 Celery 工作日志中看不到该任务的证据的原因是您实际上并未异步调用您的任务。在您的views.py 中,upload_task(request)尝试代替upload_task.delay(request),然后查看工作日志。为了使任务装饰函数异步运行,您必须使用 .delay() 或 .apply_async() 方法。在文档的其他地方,这里对此进行了介绍。

更一般地说,如果您正在寻找一种更具视觉吸引力的方式来跟踪和管理任务,请查看celeryflower