如何将大量任务划分为小任务并在特定区间执行,在php中

时间:2013-02-21 17:18:37

标签: php

我需要向大量成员发送公共邮件(例如5000名成员)。

我需要使用SMTP服务器发送它。

我将从数据库获得这5000个成员的邮件ID。

新成员将在每小时添加到数据库表

例如

1小时后,会员人数将达到6000

通过划分任务

,这是向所有这些成员发送邮件的最佳方法

3 个答案:

答案 0 :(得分:0)

您需要一个消息代理。 http://www.rabbitmq.com/http://www.zeromq.org/会对您有所帮助。

答案 1 :(得分:0)

您可以创建一种方法来跟踪已邮寄的成员(例如,数据库表上的布尔值),创建一个向X人发送邮件的脚本,并配置一个cron以每隔Y次执行此脚本。 / p>

如果成员数量的增加没有减慢并且与您的示例匹配,则需要配置脚本和cron以每小时输出超过1000条消息(例如,如果脚本发送100条消息,它应该运行超过1000条消息每小时10次,所以每5分钟约1次)。

如果成员数量的增加逐渐减慢,那么可以归结为确保所有成员都收到邮件的时间窗口。

替代方案,使用像Ogun建议的消息代理。

答案 2 :(得分:0)

如何通过curl异步运行它。 这样,虽然您循环了6000个成员,但由于长时间执行,您的文件将不会获得超时响应。

function send($params) {
    foreach($params as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    rtrim($fields_string,'&');

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'http://localhost/anotherfiletosendemail.php');
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_setopt($ch,CURLOPT_POST,count($params));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    curl_exec($ch);
    curl_close($ch);
}