2012-08-16 2 views
2

Je souhaite envoyer 10 000 courriers électroniques à la fois; peut-être d'une grande boucle for:Limitation du débit de mon programme par l'envoi d'un trop grand nombre d'emails SES via SQS

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) 

Mais je suis inquiet au sujet des 70 mails/seconde accélérateur sur notre compte SES. Donc, je veux que mon programme respecte cette limite par en inspectant la file d'attente et attende si elle a dépassé la limite et envoie à nouveau seulement si elle est vide. J'utilise boto en Python pour interfacer avec SQS. Et je m'attends à ce qu'une seule machine envoie des messages, bien que dans le futur plusieurs machines puissent envoyer des messages en parallèle en s'ignorant les uns les autres.

Comment est-ce que je peux limiter la vitesse des emails à 70 par seconde en inspectant la file d'attente ou en utilisant une technique spécifique à Python?

Répondre

2

Vous pouvez calculer des messages par seconde comme l'échantillon code suivant montre:

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

j'avais les files d'attente et des tampons à l'esprit. C'est parfait! – aitchnyu

+0

Pouvez-vous expliquer comment fonctionne ce qui précède, en essayant d'utiliser la logique dans une application multithread. Merci. – kodepet

Questions connexes