【发布时间】:2015-08-28 13:39:39
【问题描述】:
我想安排一个任务在未来的不同时间运行。我在调用任务时尝试使用 eta 选项来执行此操作。这部分本身可以正常工作,但同时,我想对任务进行速率限制。我不能同时做到这两点:安排任务在未来运行,但也要让 celery 遵守速率限制。
这是一个例子(rate_limit_eta.py)
from celery import Celery
from datetime import datetime, timedelta
app = Celery('rate_limit_eta', broker='amqp://guest@localhost//')
@app.task(rate_limit='4/m')
def my_task():
print 'execution timestamp: {}'.format(datetime.utcnow())
if __name__ == '__main__':
now = datetime.utcnow()
d = now + timedelta(seconds=5)
print now
for i in range(10):
my_task.apply_async(eta=d)
在循环中,当我使用 eta=d 调用“my_task”时,任务会尽快执行。不遵守 rate_limit。
my_task.apply_async(eta=d)
[2015-06-12 13:45:15,750: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.748498
[2015-06-12 13:45:15,757: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.757757
[2015-06-12 13:45:15,760: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.759992
[2015-06-12 13:45:15,763: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.763614
[2015-06-12 13:45:15,766: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.765996
[2015-06-12 13:45:15,768: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.768424
[2015-06-12 13:45:15,771: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.771079
[2015-06-12 13:45:15,774: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.774561
[2015-06-12 13:45:15,777: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.777425
[2015-06-12 13:45:15,780: WARNING/Worker-1] execution timestamp: 2015-06-12 13:45:15.780207
但如果我不安排任务(即没有 eta),则会强制执行速率限制。
my_task.apply_async()
[2015-06-12 13:47:05,844: WARNING/Worker-1] execution timestamp: 2015-06-12 13:47:05.843872
[2015-06-12 13:47:05,850: WARNING/Worker-1] execution timestamp: 2015-06-12 13:47:05.850502
[2015-06-12 13:47:21,919: WARNING/Worker-1] execution timestamp: 2015-06-12 13:47:21.919120
[2015-06-12 13:47:35,937: WARNING/Worker-1] execution timestamp: 2015-06-12 13:47:35.937060
[2015-06-12 13:47:51,959: WARNING/Worker-1] execution timestamp: 2015-06-12 13:47:51.959174
[2015-06-12 13:48:05,976: WARNING/Worker-1] execution timestamp: 2015-06-12 13:48:05.976197
[2015-06-12 13:48:21,998: WARNING/Worker-1] execution timestamp: 2015-06-12 13:48:21.998254
[2015-06-12 13:48:36,014: WARNING/Worker-1] execution timestamp: 2015-06-12 13:48:36.014837
[2015-06-12 13:48:52,041: WARNING/Worker-1] execution timestamp: 2015-06-12 13:48:52.041326
[2015-06-12 13:49:06,057: WARNING/Worker-1] execution timestamp: 2015-06-12 13:49:06.057286
我做错了吗?
【问题讨论】:
-
有人对此有什么想法吗?
-
有人对此有想法吗?我可以使用帮助。谢谢。
标签: celery celery-task