1

我编写了一个 python 脚本,允许用户输入消息、他的电子邮件和时间,他们希望发送电子邮件。这一切都存储在一个mysql数据库中。

但是,如何让脚本在上述时间和日期执行?它需要一个 cron 工作吗?我的意思是说在 4 月 20 日 2:15,脚本将在数据库中搜索 2:15 的所有时间,并发送这些电子邮件。但是对于 2:16 的电子邮件呢?

我正在使用提供的共享主机,所以不能有一个连续运行的脚本。

谢谢

4

3 回答 3

2

如果你不能有一个连续运行的脚本,那么必须触发它,所以这将不得不依赖于你的操作系统内部。正如您自己所说,在 unix 环境中,cron 作业可以解决问题。

设置 cron 运行脚本,让脚本等待给定时间,然后继续运行和发送,直到下一封电子邮件超过这个给定时间。然后让您的脚本为新的唤醒时间添加一个新的 cron 作业。

于 2010-04-28T19:47:40.373 回答
2

看起来这个 django 应用程序是为你的情况的人制作的......

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

此外,您的设计似乎有点缺陷。如果它在 2:15 运行,您不想只发送应该在 2:15 发送的电子邮件,而是所有应该在过去发送但尚未发送的电子邮件。

您的数据库应该: A. 发送后删除条目或 B. 在您的数据库表上定义一个列来存储它是否已发送。那么你的逻辑应该使用该列。

于 2010-04-28T20:52:58.957 回答
1

每分钟左右一个 cronjob 就可以了。如果您正在考虑这一点,您可能需要注意两件事:

1 - 预计每分钟发送多少封电子邮件?如果您需要 1 秒来发送一封电子邮件,而您每分钟有 100 封电子邮件,那么您将无法完成队列。

2 - 如果一项工作在最后一项完成之前开始,会发生什么?注意不要发送两次电子邮件。您需要确保第一个进程结束(风险:您最终可能会丢弃一封电子邮件),避免启动下一个进程(风险:第一个进程挂起整个队列)或让它们并行工作(风险:同步问题)。

如果您接受 daramarak 的建议 - 让您在脚本末尾添加一个新的 cron 作业 - 如果发生一个错误,您将面临整个系统崩溃的风险。

于 2010-04-28T21:53:55.333 回答