簡體   English   中英

Django和Celery中的異步邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM