[英]rate limiting celery task group
目前我正在限制單個任務,但希望將所有這些限制在一起作為一個組。 我沒有在文檔中看到如何做到這一點。
CELERY_ANNOTATIONS = {"tasks.aws_install_cwagent": {"rate_limit":"2/s"},
"tasks.aws_create_parameters": {"rate_limit":"2/s"},
"tasks.aws_config_cwagent": {"rate_limit":"2/s"},
"tasks.aws_describe_alarms": {"rate_limit":"2/s"},
"tasks.aws_list_aliases": {"rate_limit":"2/s"},
"tasks.aws_list_keys": {"rate_limit":"2/s"},
"tasks.aws_describe_volumes": {"rate_limit":"2/s"},
"tasks.aws_describe_instances": {"rate_limit":"2/s"},
"tasks.aws_describe_target_groups": {"rate_limit":"2/s"},
"tasks.aws_describe_target_health": {"rate_limit":"2/s"},
"tasks.aws_describe_load_balancers": {"rate_limit":"2/s"},
"tasks.aws_get_platform": {"rate_limit":"2/s"},
"tasks.aws_write_log_message": {"rate_limit":"2/s"},
"tasks.aws_list_metrics": {"rate_limit":"2/s"},
"tasks.aws_put_metric_alarm": {"rate_limit":"2/s"}}
有沒有辦法將所有這些任務作為一個組進行速率限制? 那么例如 celery 是否允許以 10/s 的速度運行?
如何才能做到這一點?
不確定這是否可以使用 celery 配置選項來處理,但您可以手動執行此操作
AWS_TASKS = (
"tasks.aws_install_cwagent",
"tasks.aws_create_parameters",
)
AWS_COMMON_OPTIONS = {"rate_limit": "2/s"}
CELERY_ANNOTATIONS.update({task: AWS_COMMON_OPTIONS for task in AWS_TASKS})
更新
使用CELERY_ANNOTATIONS
您還可以為每個任務 ( '*'
) 或滿足某個語句的每個任務設置設置。 以下是示例:
# for every task
CELERY_ANNOTATIONS = {'*': {'rate_limit': '2/s'}}
# custom statement, in this example - every task starts with 'tasks.aws'
class MyAnnotate:
def annotate(self, task):
if task.name.startswith('tasks.aws'):
return {'rate_limit': '2/s'}
CELERY_ANNOTATIONS = (MyAnnotate(), {…})
文檔: https://docs.celeryproject.org/en/3.1/configuration.html#celery-annotations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.