[英]Async logic in Django and 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工作的方式是,這個任務可以放入一個qeue並在一段時間后執行,假設有很多請求。
我們假設移動應用正在與此服務器通信。 用戶將用戶名和密碼的組合發送到服務器進行注冊。 服務器只有在處理完任務后才會返回令牌。 如果客戶沒有令牌,則無法登錄。 所以我必須等到處理任務才能發送令牌。 所以一切都變成異步處理。 那么芹菜如何解決問題呢?
當用戶不必等待響應而不是簡單的登錄任務時,celery應該用於繁重的服務器端任務。
Celery用於異步處理(主要是。)如果您正在執行您描述的操作,那么您必須在用戶繼續操作之前獲得令牌。 在這種情況下,您必須在啟動任務后通過調用token = my_task.get()
類的方法token = my_task.get()
celery的調用視為阻塞調用。 然后是一個阻塞調用,這很糟糕(很可能),但它被卸載到一個單獨的進程,這可能是一件好事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.