2014-03-31 29 views
1

我正在執行的任務與刮取有關URL的一些基本信息有關,例如標題,描述和OGP元數據。如果用戶A請求200個URL進行刮取,並且在用戶B請求10個URL之後,則用戶B可能等待比他期望的多得多。Celery如何以公平的方式分配用戶的任務?

我想要達到的目標是按用戶的比例限制特定的任務,或者至少在用戶之間是公平的。

速率限制過於寬泛的芹菜實施,因爲it uses the task name only

你有什麼建議,以實現這種公平的?

相關Celery (Django) Rate limiting

回答

0

的一種方法來解決這個周圍可以以控制用戶不排隊超過X的任務,這意味着針對每個用戶計算的入隊非處理的任務的數目(在django方面,不想用芹菜做這個)。

0

怎麼樣,而不是在一個任務中運行所有URL碎片,使每個刮成一個單一的任務,然後運行它們爲chains or groups

1

另一種方法是對使用鎖的個人用戶進行評分。使用用戶標識作爲鎖名稱。如果在某個任務相關延遲後鎖已經保持重試。

基本上,這樣做:

Ensuring a task is only executed one at a time

鎖定用戶ID和試而不是什麼都不做,如果鎖不能被收購。另外,使用Redis代替Django緩存會更好,但是無論哪種方式都可以。