sql >> Databáze >  >> NoSQL >> Redis

Django - Jak používat asynchronní frontu úkolů s celerem a redis

Jak již bylo řečeno, celer možná nebudete potřebovat. Zde je příklad odvozený z případu 2 tohoto:https://zapier.com/blog/async-celery-example-why-and-how/. Plně mi to funguje:

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

Můj index.html obsahuje:

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

A moje urls.py obsahuje:

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

Co se stane, když navštívím localhost:8000/test/ je, že okamžitě viz:

Asi po 10 sekundách vidím:

Myšlenka je taková, že svou stránku okamžitě vrátíte a použijete jquery k načtení výsledku operace, kdykoli je dokončena, a příslušnou aktualizaci stránky. Můžete přidat další věci, jako jsou ukazatele průběhu/načítání obrázku atd. Pro váš příklad můžete provést zpracování pro pi1 a pis na pozadí a po dokončení jej načtěte do HTML.



  1. MongoDB Vztah jeden k mnoha

  2. Výkon hromadného vkládání v MongoDB pro velké sbírky

  3. Zkompilovaný model Mongoose nelze přepsat

  4. Proč mangusta vždy přidává na konec názvu mé sbírky písmeno s