-1

views.py

from registration.models import Registration
from django.core.context_processors import csrf
from registration import tasks
from django.shortcuts import render_to_response
def validate(request):
    state="notvalid"
    if request.method == 'POST':# If the form has been submitted...
        form = Registration(request.POST) # A form bound to the POST data
        state="notvalid"
        if form.is_valid(): 
            username = form.cleaned_data['username']
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            from django.contrib.auth.models import User
            user = User.objects.create_user(username,email,password)
            user.first_name=first_name
            user.last_name=last_name        
            user.save() 
            state="added data"
        tasks.mail()
    else:
        form = Registration() # An unbound form

    return render_to_response('auth1.html', {
        'form': form,'state':state,
    })

tasks.py

from celery import task
import celery

@celery.task()
def mail():
    from django.core.mail import send_mail
    for x in range(10000000):
        print x
    return True

タスクは、ビューの応答時間に影響を与えることなく、並行して実行する必要があります。つまり、バックグラウンドでメール機能を実行する必要があります

ただし、データベースを追加した後は、render_to_responseを返す必要があります

4

1 に答える 1

3

mailタスクをトリガーするための呼び出しは次のようになります。

tasks.mail.delay()

がないdelay()場合、タスクはCeleryワーカーではなく、ビューと同じプロセスで実行されるため、ビュー関数mailは終了するまでブロックされます。

詳細については、 http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#calling-our-taskを参照してください。

于 2012-07-30T20:02:36.513 に答える