Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Django - So verwenden Sie die asynchrone Aufgabenwarteschlange mit Sellerie und Redis

Wie bereits erwähnt, benötigen Sie möglicherweise keinen Sellerie. Hier ist ein aus Fall 2 abgeleitetes Beispiel:https://zapier.com/blog/async-celery-example-why-and-how/. Bei mir funktioniert es voll:

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')

Meine index.html enthält:

<!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>

Und meine urls.py enthält:

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)
]

Was passiert, wenn ich localhost:8000/test/ besuche, ist, dass ich sofort siehe:

Nach etwa 10 Sekunden sehe ich dann:

Die Idee ist, dass Sie Ihre Seite sofort zurückgeben und jquery verwenden, um das Ergebnis der Operation abzurufen, wenn diese abgeschlossen ist, und Ihre Seite entsprechend zu aktualisieren. Sie können weitere Dinge wie Fortschrittsbalken/Ladebild usw. hinzufügen. Für Ihr Beispiel können Sie die Verarbeitung für pi1 durchführen und pis im Hintergrund und lade es danach in das HTML.