芹菜和Django简单的例子

时间:2013-11-23 16:19:50

标签: python django celery scalability

我们来看一个简单的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()

在这个例子中,有人可以提供Celery的实现吗?想象一下,这是一个每秒有数百个请求的大型项目。

1 个答案:

答案 0 :(得分:78)

假设您同时安装了Python的celerydjango-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现在是芹菜任务;如果你安装了正确的Python包(如上所述),那就是代码(你要求的实现)。 delay异步执行您的函数 - 即返回HTTP响应而不等待异步任务完成。

在本地,您可以使用python manage.py celeryd运行celery守护进程。

在生产中,您必须使用例如upstartsupervisor或任何其他工具来设置芹菜过程本身,以控制此过程的生命周期。

详细记录了here