如何在php中将大量任务划分为小任务并在特定的时间间隔内执行


How to divide large amount of tasks into small ones and execute in particular interval,in php

我需要向大量成员(例如5000名成员)发送一封普通邮件。

我需要使用SMTP服务器发送此邮件。

我将从数据库获得这5000名会员的邮件id。

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

例如

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

那么,通过划分任务

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

您需要一个消息代理。http://www.rabbitmq.com/或http://www.zeromq.org/会帮助你的。

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

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

如果会员数量的增长逐渐放缓,那么归根结底是你必须在多大的时间窗口内确保所有会员都收到了邮件。

或者,使用Ogun建议的消息代理。

如何使用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);
}