Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Django - Jak korzystać z asynchronicznej kolejki zadań z selerem i redis

Jak powiedziano wcześniej, możesz nie potrzebować selera. Oto przykład wywodzący się z przypadku 2 tego:https://zapier.com/blog/async-celery-example-why-and-how/. U mnie w pełni działa:

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 zawiera:

<!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 mój urls.py zawiera:

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 się dzieje, gdy odwiedzam localhost:8000/test/, to natychmiast zobacz:

Po około 10 sekundach widzę:

Pomysł polega na tym, że natychmiast zwracasz swoją stronę i używasz jquery, aby pobrać wynik operacji po jej zakończeniu i odpowiednio zaktualizować stronę. Możesz dodać więcej rzeczy, takich jak paski postępu / ładowanie obrazu itp. Na przykład możesz wykonać przetwarzanie dla pi1 i pis w tle i załaduj go do kodu HTML po zakończeniu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy polecenie UNLINK jest zawsze lepsze niż polecenie DEL?

  2. Korzystanie z zestawów Redis

  3. Node Js:zadanie Redis nie kończy się po zakończeniu zadania

  4. Dane wiosenne Operacja Redis HGETALL

  5. Jak prawidłowo korzystać z pul połączeń w redis?