gpt4 book ai didi

php - 如何使自动化任务比简单的 CRON 作业更高级?

转载 作者:行者123 更新时间:2023-11-30 23:32:58 29 4
gpt4 key购买 nike

我目前有一个脚本,它一次从 MySQL 表中获取 1,000 行,遍历它们,进行一些处理,简单的事情。不过现在,它还不是自动化的。每次我想运行它时,我都会连接到终端并执行 php myscript.php 并等待它结束。这样做的问题是它不够快 - 脚本所做的处理是抓取,我被要求找出如何同时启用多个抓取实例以加快速度。

因此,我开始尝试计划如何执行此操作,并在谷歌搜索了几次后意识到,老实说,我什至不知道正确的术语到底是什么。

我是否希望使用 Apache 提供服务?还是守护进程?

我想让我的脚本做的是:

  1. 查找主表的某种“ Controller ”,获取尚未设置特定标志的 X 行(可能是数万或数十万)
  2. 计算结果集的总数,计算出需要多少个“子项”才能分批发送行,例如,向每个“子项”发送 5,000 行
  3. 那些“ child ”各自得到一组行。假设 Child1 获得第 0 - 5,000 行,Child2 获得第 5,001 - 10,000 行,等等
  4. 在每个“ child ”运行完它的一批行后,它需要告诉“ Controller ”它已经完成,这样“ Controller ”就可以告诉我们的 Sphinx 索引器重新索引,然后发送一批新的行给刚刚完成的 child (假设还有更多行要做)

我主要关心的是如何将所有这些自动化,以及如何让两个或更多 PHP 脚本相互“交谈”,或者至少, children 通知 Controller 他们已经完成并正在等待新批处理的行。

我担心的另一个问题是,我是否应该担心这些无数脚本在行锁定或类似问题方面的 MySQL 数据库问题?或者,如果完成的行要进入的表仅使用 auto_increment,这是否会导致 ID 号冲突?

最佳答案

您可能想考虑将该脚本变成守护进程。通过一些研究和修补,您可以获得 System_Daemon­Pear设置就是为了做到这一点。

这是一篇帮助我编写第一个 PHP 守护进程的文章:

Create daemons in PHP (09 Jan 2009; by Kevin van Zonneveld)

您还可以考虑上面的评论,并在后台运行您的脚本,让脚本无限期地连续循环运行,并设置等待计时器,例如:

<?php
$timer=60; //after execution of the script, wait 60 seconds before running the script again
$fault=false;
while($fault==false) {
...YOUR SCRIPT CONTENTS HERE
//to kill your script, set $fault=true;
sleep $timer;
}
?>

关于php - 如何使自动化任务比简单的 CRON 作业更高级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626397/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com