3

我想一次发送 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 封?

4

1 回答 1

3

您可以像下一个代码示例所示那样计算每秒消息数:

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
于 2012-08-16T14:03:15.653 回答