Redis
 sql >> база данни >  >> NoSQL >> Redis

Django - Как да използвам асинхронна опашка от задачи с целина и redis

Както беше казано по-рано, може да не се нуждаете от целина. Ето пример, извлечен от случай 2 на това:https://zapier.com/blog/async-celery-example-why-and-how/. При мен работи напълно:

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 съдържа:

<!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 съдържа:

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, за да извлечете резултата от операцията, когато тя приключи, и съответно да актуализирате страницата си. Можете да добавите още неща като ленти за напредък/зареждане на изображение и т.н. За вашия пример можете да направите обработката за pi1 и pis във фонов режим и го заредете в HTML, след като приключите.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Персонализираната среда на Rails Resque.enqueue не създава работни места

  2. Как да съхранявате масив от обекти в Redis?

  3. Redis само кеш ли е?

  4. Достъп до докеризиран redis от хост на Windows

  5. Как да проверите дали сокетът е жив (свързан) в socket.io с множество възли и socket.io-redis