限制我的程序通过SQS发送太多SES电子邮件

时间:2012-08-16 13:41:39

标签: python amazon-web-services amazon-sqs

我想一次发送10000封个人邮件;可能来自一个大的for循环:

for user in _10000_users:
    msg  = generate_message( user)
    if(ses.can_send_more_messages == False):
        sleep( 0.1) #to throttle ourselves
    ses.send_message( msg)

但我担心SES帐户上的 70邮件/秒节流。因此,我希望我的程序通过检查队列来尊重此限制,并等待它超出限制并仅在清除时再次发送。

我在Python中使用boto与SQS进行交互。我希望只有一台机器可以发送消息,尽管将来多台机器可能并行发送消息而彼此无知。

如何通过检查队列或使用特定于Python的技术,将电子邮件的速率限制为每秒70个?

1 个答案:

答案 0 :(得分:2)

您可以像下一个代码示例所示计算每秒邮件的速率:

from time import time

time_started = time()
messages_sent = 0.
MAX_PER_SEC = 70

for user in _10000_users:
    msg = generate_message(user)
    if messages_sent / (time() - time_started) >= MAX_PER_SEC:  # Rate condition
        sleep(0.1)
    ses.send_message(msg)
    messages_sent += 1