让我们来看一个简单的Django示例。
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()
有人可以在此示例中提供Celery的实现吗?想象这是一个大型项目,每秒有数百个请求。
假设您同时安装了Python的celery和django- celery,请tasks.py在您的应用程序下创建以下文件:
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在上面的示例中删除文件。
utils/utilities.py
在您的代码中views.py更改create_user来自以下位置的调用:
views.py
create_user
create_user(form.cleaned_data)
至:
create_user.delay(form.cleaned_data)
create_user现在基本上是芹菜任务;如果您安装了正确的Python软件包(如上所述),那么就按照代码(您所要求的实现)进行安装即可。delay异步执行您的函数- 即返回HTTP响应,而无需等待异步任务完成。
delay
在本地,您可以使用来运行celery守护进程python manage.py celeryd。
python manage.py celeryd
在生产中,你必须设置使用例如芹菜过程本身upstart,supervisor或任何其他工具来控制这种流程的生命周期。
upstart
supervisor
此处记录了更多详细信息。