Django和Celery中的异步逻辑



从这个问题开始,我有一个任务:

@task()
def create_user(data):
    try:
        User.objects.get(username=data['username'])
        return 'Username already exists'
    except:
        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 profile.token

我理解Celery的工作方式是,假设有很多请求,这个任务可以放在que中并在一段时间后执行。

让我们假设一个移动应用程序正在与此服务器通信。用户将用户名和密码的组合发送到服务器进行注册。服务器只有在处理完任务后才会返回令牌。如果客户没有令牌,就无法登录。因此,我必须等到任务处理完毕才能发送令牌。因此,一切都变成了异步处理。那么芹菜是如何解决这个问题的呢?

当用户不必等待响应,而不必等待登录等简单任务时,应该将芹菜用于繁重的服务器端任务。

Celery用于异步处理(好吧,主要是。)如果您正在执行您描述的操作,那么在用户继续操作之前,您必须拥有令牌。在这种情况下,您必须在启动任务后调用类似token = my_task.get()的东西,从而将对芹菜的调用视为阻塞调用。然后它是一个阻塞调用,这很糟糕(很可能),但它被卸载到一个单独的进程,这可能是一件好事。

相关内容

  • 没有找到相关文章

最新更新