2012-08-16 23 views
2

我想一次发送10000个单独的邮件;可能从一个大for循环:限制我的程序通过SQS发送过多的SES电子邮件

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) 

但我担心70封/秒油门我们的SES账户。所以我希望我的程序遵守这个限制检查队列,并等待它是否超过限制,并且只有在清除时才再次发送。

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

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

回答

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 
+0

我脑子里想的队列和缓冲区。太棒了! – aitchnyu 2012-08-17 05:53:37

+0

能否请你解释一下上面的工作,试图使用多线程应用程序中的逻辑。谢谢。 – kodepet 2015-08-06 23:05:21