Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 一万个cron作业还是一万次循环?_Loops_Cron - Fatal编程技术网

Loops 一万个cron作业还是一万次循环?

Loops 一万个cron作业还是一万次循环?,loops,cron,Loops,Cron,我有一个web应用程序,可以在我的用户选择的时间向他们发送定制的电子邮件。因此,在一天中的任何特定时间,我可能都不需要做任何事情,或者发送多达一万封电子邮件 以前,我用一个cron任务解决了这个问题,每分钟都会启动一次。它将调用一个脚本来查找下千封需要发送的电子邮件。脚本会将它们全部标记为“正在进行”,然后在它们上循环,试图发送它们。循环很重-调用远程API发送电子邮件,将记录更新为“已发送”,并记录操作。我发现的问题是,偶尔,循环会中断、失败,服务器会闪烁,数百封电子邮件会被标记为“正在处理”

我有一个web应用程序,可以在我的用户选择的时间向他们发送定制的电子邮件。因此,在一天中的任何特定时间,我可能都不需要做任何事情,或者发送多达一万封电子邮件

以前,我用一个cron任务解决了这个问题,每分钟都会启动一次。它将调用一个脚本来查找下千封需要发送的电子邮件。脚本会将它们全部标记为“正在进行”,然后在它们上循环,试图发送它们。循环很重-调用远程API发送电子邮件,将记录更新为“已发送”,并记录操作。我发现的问题是,偶尔,循环会中断、失败,服务器会闪烁,数百封电子邮件会被标记为“正在处理”

我现在已经重写了循环,以获得一封需要发送的电子邮件,将其标记为“正在发送”,发送,标记为“已发送”,记录,然后获取下一封。我运行了一分钟,它想运行多少圈就运行多少圈。但这确实是cpu密集型的,而且似乎效率很低,需要大量的db调用

我现在在想,每天的电子邮件都应该有自己的cron任务。然后,我会找到一万个或更多的工作,调用一个特定的url,比如。我在这里担心的是,我需要更新cron作业,比如时区和用户偏好更新(“在下午6点而不是上午10点向我发送电子邮件”)。因此,我正在以编程方式重新编写crontab,而且可能经常这样做


你将如何解决这个问题?顺便说一句,您知道有任何web服务设计来解决这个问题吗?

10000个cron作业将导致10000个可执行文件运行。我怀疑这将是您可用的最不具可扩展性的选项。

这取决于您的具体需求,尽管10k cron作业看起来非常糟糕,不管怎样。 也许您可以有几个cronjob,每个cronjob选择一批要发送的邮件,以实现并行性并避免在底部延迟发送邮件


此外,对于“以编程方式重写我的cron”部分,还有可用的cron库。我通常用它来做这类事情,但它可能太过臃肿,无法满足您的需要,所以您可能希望使用更轻的库。

我的想法是使用curl来简单地调用URL。既然它是一个web服务器,那么它不就是一个被调用10k次的URL吗?