sql >> Database >  >> NoSQL >> Redis

Django - Hoe asynchrone takenwachtrij te gebruiken met selderij en redis

Zoals eerder gezegd, heb je misschien geen bleekselderij nodig. Hier is een voorbeeld afgeleid van geval 2 hiervan:https://zapier.com/blog/async-celery-example-why-and-how/. Het werkt volledig voor mij:

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

Mijn index.html bevat:

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

En mijn urls.py bevat:

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

Wat er gebeurt als ik localhost:8000/test/ bezoek, is dat ik onmiddellijk zie:

Na ongeveer 10 seconden zie ik dan:

Het idee is dat u uw pagina onmiddellijk retourneert en jQuery gebruikt om het resultaat van de bewerking op te halen wanneer dat is voltooid en uw pagina dienovereenkomstig bij te werken. U kunt meer dingen toevoegen, zoals voortgangsbalken/afbeelding laden enz. U kunt bijvoorbeeld de verwerking voor pi1 doen en pis op de achtergrond en laad het in de HTML nadat dat klaar is.



  1. Hoe de lengte van de array mongodb te vinden

  2. Het bijwerken van het pad 'x' zou een conflict veroorzaken bij 'x'

  3. Meldings- en nieuwsgedeelte met behulp van Redis

  4. mongodb versie 3.0.0 client robomongo mongovue