2013-11-23 8 views
33

चलो एक साधारण Django उदाहरण लेते हैं।सेलेरी और Django सरल उदाहरण

एप्लिकेशन/models.py

from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    token = models.CharField(max_length=32) 

एप्लिकेशन/views.py

from django.http import HttpResponse 
from django.views.decorators.csrf import csrf_exempt 
from forms import RegisterForm 
from utils.utilities import create_user 

@csrf_exempt 
def register_view(request): 
    if request.method == 'POST': 
     form = RegisterForm(request.POST) 
     if form.is_valid(): 
      create_user(form.cleaned_data) 
      return HttpResponse('success') 

utils/utilities.py

def create_user(data): 
    user = User.objects.create_user(username=data['username'], email=None, password=data['password']) 
    user.save() 
    profile = UserProfile() 
    profile.user = user 
    profile.token = generate_token() 
    profile.save() 

किसी इस उदाहरण में अजवाइन के एक कार्यान्वयन प्रदान कर सकते हैं ? कल्पना करें कि प्रति सेकंड सैकड़ों अनुरोधों के साथ यह एक बड़ी परियोजना है।

+1

बस इतना ही पता है कि उदाहरणों के लिए सीधे अनुरोध ऑफ़-विषय के रूप में माना जाता है, क्योंकि वे अक्सर उन लोगों से आते हैं जिन्होंने पहले कोई शोध नहीं किया है। यह स्पष्ट रूप से आपके लिए लागू नहीं होता है, लेकिन यह सामान्य दिशानिर्देश के बारे में जागरूक होने के लायक है - जब आप मो प्राप्त करते हैं तो [सहायता] (http://stackoverflow.com/help) अनुभाग देखें। – halfer

उत्तर

76

आप यह मानते हुए दोनों पायथन के celery और django-celery स्थापित, अपने अनुप्रयोग के अंतर्गत निम्नलिखित tasks.py फ़ाइल बनाने:

utils/tasks.py

from celery import task 
# other imports 

@task() 
def create_user(data): 
    user = User.objects.create_user(
     username=data['username'], email=None, password=data['password'] 
    ) 
    user.save() 
    profile = UserProfile() 
    profile.user = user 
    profile.token = generate_token() 
    profile.save() 

    return None 

ऊपर अपने उदाहरण में अपने utils/utilities.py फ़ाइल हटाएँ।

views.py परिवर्तन में अपने कोड में create_user कॉल:

create_user(form.cleaned_data) 

रहे हैं:

create_user.delay(form.cleaned_data) 

मूल रूप से create_user अब एक अजवाइन काम है; यदि आपके पास सही पायथन पैकेज स्थापित हैं (जैसा ऊपर बताया गया है), कोड-वार (कार्यान्वयन जिसे आप पूछते हैं) यह है। delay आपके फ़ंक्शन को असीमित रूप से निष्पादित करता है - यानी HTTP प्रतिक्रिया को अतुल्यकालिक कार्य को पूरा करने के इंतजार किए बिना वापस किया जाता है।

स्थानीय रूप से आप python manage.py celeryd का उपयोग कर एक अजवाइन डिमन प्रक्रिया चला सकते हैं।

उत्पादन में आपको उदाहरण के लिए upstart, supervisor या ऐसी प्रक्रिया के जीवन चक्र को नियंत्रित करने के लिए किसी अन्य उपकरण का उपयोग करके खुद को अजवाइन प्रक्रिया स्थापित करनी होगी।

अधिक जानकारी here दस्तावेज।

+0

मैं आपको इसके लिए सुनहरा बैज दूंगा! बहुत बहुत धन्यवाद! –

+0

@TeodorScorpan धन्यवाद :) –

+2

मैंने django व्यवस्थापक में दिखाए गए कार्यों को प्राप्त करने की कोशिश करने पर कुछ समय बिताने के बाद यह django-celery टेम्पलेट प्रोजेक्ट किया: https://github.com/mikeumus/django-celery-example आशा है कि यह किसी की सहायता करे ! :) – Mikeumus

संबंधित मुद्दे