在网页上无法直接显示Celery的结果,因为Celery是一个分布式任务队列,任务是异步执行的,不会阻塞网页加载。解决方法是使用Ajax和长轮询(Long Polling)来获取Celery任务的执行结果,并将结果返回给网页显示。
下面是一个使用Django框架和Celery的代码示例:
# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
# tasks.py
from celery import Celery
app = Celery('myapp', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
# views.py
from django.http import JsonResponse
from .tasks import add
def get_result(request):
task = add.delay(4, 5) # 异步执行任务
result = task.get() # 获取任务执行结果
return JsonResponse({'result': result})
// script.js
function getResult() {
$.ajax({
url: '/get_result/',
type: 'GET',
success: function(data) {
if (data.result) {
$('#result').text(data.result);
} else {
setTimeout(getResult, 1000); // 继续轮询
}
},
error: function() {
setTimeout(getResult, 1000); // 继续轮询
}
});
}
$(document).ready(function() {
getResult();
});
Celery Result
Celery Result:
确保启动Celery worker和Django服务器后,访问网页,就能实时获取到Celery任务的执行结果并显示在网页上。