Celery在不到两周的时间内发出600K请求

时间:2013-02-03 14:12:59

标签: celery django-celery amazon-sqs celery-task

我今天收到了亚马逊SQS的月度账单,我惊讶地看到600.000请求使用到我的队列。

我所做的就是每分钟运行一个任务。这如何加起来600.000个请求?

@celery.task(name='tasks.check_for_events')
@periodic_task(run_every=timedelta(minutes=1))  
def check_for_events():    
    now = datetime.utcnow().replace(tzinfo=utc,second=00, microsecond=00)
    events = Event.objects.filter(is_reminder_sent = False).filter(reminder_date_time__range=(now - timedelta(minutes=1), now))    
    dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None    
    for event in events:
          sendEmail.delay( ...)


@celery.task(name='tasks.sendEmail')
def sendEmail(...)
    ....

我仍然是芹菜的新手,所以可能是我做了一些根本错误的事情。 有什么提示吗?

1 个答案:

答案 0 :(得分:4)

首先,SQS将发送,接收和删除视为请求。那就是

>>> 600000 / 3
200000

任务。

上个月有31天。因此,仅检查事件任务就有

>>> 60 * 24 * 31
44640

任务或

>>> 44640 * 3
133920

预先使用的请求。

现在,你只需要平均

>>> (200000.0 - 44640) / 44640
3.4802867383512543
每次check_for_events调用

事件以获得600k请求。

现在我不确定你要处理的事件数量是多少,但也许这会更多地考虑使用情况。