首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -如何使用带有芹菜和redis的异步任务队列

Django -如何使用带有芹菜和redis的异步任务队列
EN

Stack Overflow用户
提问于 2015-08-20 19:06:02
回答 2查看 3K关注 0票数 2
代码语言:javascript
复制
#In my views.py file
pi1 = None
pis1 = None
def my_func():
    #Essentially this function sets a random integer to pi1 and pis1
    global pi1, pis1
    pi1 = randint(0,9)
    pis1 = randint(0,9)
    return        

def index(request):

    my_func()

    context = {
        "pi1" : pi1,
        "pis1" : pis1,
    }

    return render(request, "index.html", context)

#In the index.html file
<h1>{{ pi1 }}</h1>
<h1>{{ pis1 }}</h1>

为了简单起见,我删除了很多代码,但这是它的要点。尽管我已经为my_func发布了代码,但这是一个耗时的函数,在访问index.html时会导致其加载一段时间。如何使用芹菜和红葡萄酒在后台运行my_func,从而使index.html加载得更快?

我读过芹菜文档,但我仍然很难设置芹菜和红葡萄酒。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-20 20:54:56

如前所述,你可能不需要芹菜。下面是从本例2派生的一个示例:https://zapier.com/blog/async-celery-example-why-and-how/。对我来说很有效:

代码语言:javascript
复制
from time import sleep
import json
from django.http import HttpResponse
from django.shortcuts import render

def main_view(request):
    return render(request, 'index.html')

def ajax_view(request):
    sleep(10) #This is whatever work you need
    pi1 = "This is pi1" #I just made pi1/pis1 random values
    pis1 = "This is pis1"
    context = {
        "pi1" : pi1,
        "pis1" : pis1,
    }
    data = json.dumps(context)

    return HttpResponse(data, content_type='application/json')

我的index.html包含:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Main View</title>
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
    <script>
    $(document).ready(function(){
        $.ajax({
            url: "/test_ajax/",
        }).done(function( data) {
            $("#pi1").text(data.pi1);
            $("#pis1").text(data.pis1); 
        });
    });
</script>
  </head>
  <body>
      <h1 id = "pi1">Loading</h1>
      <h1 id = "pis1">Loading</h1>
  </body>
</html>

我的urls.py包含:

代码语言:javascript
复制
from django.conf.urls import include, url
from django.contrib import admin
from testDjango.test import main_view, ajax_view

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^test/', main_view),
    url(r'^test_ajax/', ajax_view)
]

当我访问localhost:8000/test/是我立即访问时会发生什么?

大约10秒后,我看到:

这样做的目的是立即返回页面,并在操作完成时使用jquery获取操作结果,并相应地更新页面。您可以添加更多的内容,如进度条/加载图像等。对于您的示例,您可以在后台对pi1pis进行处理,并在完成后将其加载到HTML中。

票数 2
EN

Stack Overflow用户

发布于 2015-08-20 19:49:16

这里不需要芹菜。您可以使用AJAX请求在页面上加载这些值。您应该创建一个单独的视图来计算这个值,并在加载index.html之后用javascript调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32126366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档