Время напоминания по электронной почте в Python - PullRequest
1 голос
/ 28 апреля 2010

Я написал скрипт на python, который позволяет пользователю вводить сообщение, его адрес электронной почты и время, и они хотели бы, чтобы сообщение было отправлено. Все это хранится в базе данных mysql.

Однако как мне заставить скрипт выполняться в указанное время и дату? это потребует работы cron? Я имею в виду, скажем, в 2:15 20 апреля, сценарий будет искать в базе данных все время 2:15 и отправлять эти электронные письма. Но как насчет электронных писем в 2:16?

Я использую общий хостинг, поэтому не могу иметь постоянно работающий скрипт.

Спасибо

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

Похоже, это приложение django было создано только для людей в вашей ситуации ...

http://code.google.com/p/django-cron/

Кроме того, ваш дизайн кажется немного испорченным. Если он работает в 2:15, вы не хотите отправлять только электронные письма, которые должны быть отправлены в 2:15, но все те, которые должны были быть отправлены в прошлом, не были отправлены.

Ваша база данных должна: A. Удалить записи после отправки или же Б. Определите столбец в вашей таблице базы данных для хранения, был ли он отправлен или нет. Тогда ваша логика должна использовать этот столбец.

2 голосов
/ 28 апреля 2010

Если у вас не может быть постоянно работающего скрипта, что-то должно его запустить, так что придется полагаться на внутренние компоненты вашей ОС. В среде Unix работа cron, как вы сами заявляете, сработает.

Установите cron для запуска сценария и заставьте сценарий подождать определенное время, а затем продолжите выполнение и отправку, пока следующее электронное письмо не пройдет больше, чем в данное время. Затем заставьте ваш скрипт добавить новую работу cron для нового времени пробуждения.

1 голос
/ 29 апреля 2010

Cronjob каждую минуту или около того сделает это. Если вы обдумываете это, вам могут понравиться две вещи:

1 - Сколько сообщений электронной почты ожидается в минуту? Если отправка электронного письма занимает у вас 1 секунду, а у вас 100 электронных писем в минуту, очередь не будет завершена.

2 - Что произойдет, если одна работа начнется до того, как закончится последняя? Будьте осторожны, чтобы не отправлять электронную почту дважды. Вам нужно либо убедиться, что первый процесс завершится (риск: вы можете в конечном итоге отбросить электронное письмо), избегать запуска следующего процесса (риск: первый процесс зависает всю очередь) или заставить их работать параллельно (риск: проблемы с синхронизацией). 1005 *

Если вы примете предложение Дарамарака - заставьте ваш скрипт добавить новое задание cron в конце - у вас есть риск разрушения всей системы, если произойдет одна ошибка.

...