芹菜 - 一秒内完成一项任务

时间:2014-10-13 11:54:23

标签: python celery

我使用Celery向服务器发出请求(在任务中)。我有硬限制 - 一秒内只有1个请求(从一个ip)。 我读了this,所以我想要它 - 1 / s。 在 celeryconfig.py 我有:

CELERY_DISABLE_RATE_LIMITS = False

CELERY_DEFAULT_RATE_LIMIT = "1/s"

但我收到的消息是,我每秒的请求太多了。

call.py 中,我使用groups

我认为, rate_limits 不起作用,因为我在 celeryconfig.py 中有错误。

如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

当你用

开始一个芹菜工人
celery -A your_app worker -l info

默认并发性等于您的计算机拥有的核心数。因此,如果您设置了速率限制为' 1 / s',它会尝试同时处理多个任务。

在celery_config中设置rate_limit也是一个坏主意。现在您只有一项任务,如果您向应用添加新任务,速率限制将相互影响。

每秒钟实现一项任务的简单方法就是这样。

<强> tasks.py

import time

from  celery  import  Celery
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')

@app.task()
def task1():
    time.sleep(1)
    return('task1')

现在以并发性

开始工作
celery -A my_taks.py worker -l info -c 1

这将每秒只执行一个任务。这是我的日志,上面的代码。

[2014-10-13 19:27:41,158: INFO/MainProcess] Received task: task1[209008d6-bb9d-4ce0-80d4-9b6c068b770e]
[2014-10-13 19:27:41,161: INFO/MainProcess] Received task: task1[83dc18e0-22ec-4b2d-940a-8b62006e31cd]
[2014-10-13 19:27:41,168: INFO/MainProcess] Received task: task1[e1b25558-0bb2-405a-8009-a7b58bbfa4e1]
[2014-10-13 19:27:41,171: INFO/MainProcess] Received task: task1[2d864be0-c969-4c52-8a57-31dbd11eb2d8]
[2014-10-13 19:27:42,335: INFO/MainProcess] Task task1[209008d6-bb9d-4ce0-80d4-9b6c068b770e] succeeded in 1.170940883s: 'task1'
[2014-10-13 19:27:43,457: INFO/MainProcess] Task task1[83dc18e0-22ec-4b2d-940a-8b62006e31cd] succeeded in 1.119711205s: 'task1'
[2014-10-13 19:27:44,605: INFO/MainProcess] Task task1[e1b25558-0bb2-405a-8009-a7b58bbfa4e1] succeeded in 1.1454614s: 'task1'
[2014-10-13 19:27:45,726: INFO/MainProcess] Task task1[2d864be0-c969-4c52-8a57-31dbd11eb2d8] succeeded in 1.119111023s: 'task1'