Teo*_*pan 34 python django scalability celery
我们来看一个简单的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)
Run Code Online (Sandbox Code Playgroud)
应用程序/ 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')
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
在这个例子中,有人可以提供Celery的实现吗?想象一下,这是一个每秒有数百个请求的大型项目.
Jos*_*mit 79
假设您同时安装了Python的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
Run Code Online (Sandbox Code Playgroud)
utils/utilities.py
在上面的示例中删除您的文件.
在您的代码中views.py
更改create_user
来自以下的调用:
create_user(form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)
至:
create_user.delay(form.cleaned_data)
Run Code Online (Sandbox Code Playgroud)
create_user
现在基本上是一个芹菜任务; 如果你安装了正确的Python包(如上所述),那就是代码(你要求的实现).delay
异步执行您的函数 - 即返回HTTP响应而不等待异步任务完成.
在本地,您可以使用celery守护程序进行运行python manage.py celeryd
.
在生产中,您必须使用例如或任何其他工具来设置芹菜过程upstart
,supervisor
以控制此过程的生命周期.
归档时间: |
|
查看次数: |
19903 次 |
最近记录: |