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. hgetおよびhsetコマンドのRedisベンチマーク

    2. Redis接続を閉じたり開いたままにしたりする必要があるのはなぜですか?

    3. MySQLからMongoDBへ-管理に関するチートシート

    4. Mongooseで既存のコレクションにアクセスするにはどうすればよいですか?