我为Django Celery做了以下任务(使用Amazon SQS)。
@task
def upload_task(request, **kwargs):
file = request.FILES['file']
ContactCSVModel.import_from_file(file)
return True
这似乎有效,即文件已成功添加到我的数据库中,但我不确定它是否正在使用Celery。我怎么知道这是否有效。我能看到什么吗?在终端我跑了......
manage.py celery worker --loglevel=info
,其中指出我有一个名为contacts.tasks.upload_task
的任务,但我从来没有看到任何事情发生它只是声明......
[2013-03-14 20:52:47,947:INFO / MainProcess] consumer:已连接到 SQS:// AJSUQJZKNSJA81JM @本地//
任何想法,如果我的任务已经运行并且已经完成(是的,我知道它已经完成,因为它在数据库中,但是是通过Celery吗?)
这是从
运行任务的地方views.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))
像我说的那样将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'
答案 0 :(得分:4)
您在Celery工作日志中没有看到任务证据的原因是因为您实际上并未异步调用任务。在views.py中,尝试upload_task(request)
而不是upload_task.delay(request)
,然后查看工作日志。为了使任务修饰函数异步运行,必须使用.delay()或.apply_async()方法。除了文档中的其他位置之外,还有here。
更一般地说,如果您正在寻找一种更具视觉吸引力的方式来跟踪和管理任务,请查看celery flower。