ограничение скорости писем с использованием Python - PullRequest
1 голос
/ 03 мая 2010

У меня есть скрипт на python, который считывает адреса электронной почты из базы данных на определенную дату, например сегодня, и отправляет им по электронной почте одно за другим сообщение. Он читает данные из MySQL с помощью модуля MySQLdb, сохраняет все результаты в словаре и рассылает электронные письма, используя:

rows = cursor.fetchall () #All email addresses returned that are supposed to go out on todays date.

for row is rows: #send email

Однако мой хостинг позволяет отправлять только 500 писем в час. Как я могу ограничить свой сценарий, чтобы убедиться, что в течение часа отправляется только 500 электронных писем, а затем проверить базу данных, осталось ли больше писем на сегодня или нет, и затем отправить их в следующий час.

Сценарий активируется с помощью задания cron.

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

Если вы не возражаете, если скрипт работает часами, вы можете просто сделать паузу на несколько секунд между каждым письмом.

from time import sleep

if address_count < 500:
    sleep_time = 0
else:
    sleep_time = 7.5

for address in addresses:
    send_message(address)
    sleep(sleep_time)

(Примечание: это было написано для максимальной ясности, а не для максимальной эффективности)

0 голосов
/ 03 мая 2010

Я бы запустил скрипт ежечасно, используя cron, и ограничил бы количество записей, которые вы берете из базы данных, до 490 (просто чтобы быть в безопасности), используя fetchmany вместо fetchall.

0 голосов
/ 03 мая 2010

Когда вы отправляете электронное письмо, записываете ли вы его каким-либо образом в базу данных, чтобы тот же адрес электронной почты не был возвращен другим запросом в тот же день? (скажем, удаляя адрес электронной почты, или устанавливая флаг, или что-то?) Если это так, вы можете просто добавить LIMIT 500 к вашему запросу SQL и запускать скрипт Python каждый час.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...