Let's take a simple Django example.
app/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)
app/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()
Can somebody provide an implementation of Celery in this example? Imagine this is a large project with hundreds of requests per sec.
Yes you can. Celery is a generic asynchronous task queue.
Assuming you have both Python's celery and django-celery installed, create the following tasks.py
file under your app:
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
Delete your utils/utilities.py
file in your example above.
In your code in views.py
change the create_user
call from:
create_user(form.cleaned_data)
to:
create_user.delay(form.cleaned_data)
Basically create_user
is now a celery task; if you have the right Python packages installed (as mentioned above), code-wise (the implementation you ask for) that's it. delay
executes your function asynchronously - i.e. the HTTP response is returned without waiting for the asynchronous task to complete.
Locally you can run a celery daemon process using python manage.py celeryd
.
In production you have to set up the celery process itself using for instance upstart
, supervisor
or any other tool to control the lifecycle of such process.
Further details documented here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With