【发布时间】:2011-01-12 06:02:49
【问题描述】:
我有一个 mysql 数据库表,里面有 1000 多条记录,比如说 5000 条记录。每条记录都有一个processed 布尔标志,默认为false (0)。我想做的是每分钟在 cron 上运行一个 PHP 脚本。它的代码是这样的:
<?php
process();
function process()
{
$sql = "SELECT id FROM items WHERE processed = '0' ORDER BY id ASC LIMIT 1";
$result = $this->db->query($sql);
if (! $result->has_rows())
die;
$id = $result->getSingle('id');
processItem($id); //Will set processed to 1 after processing is done
process();
}
?>
上面的代码应该很清楚了,它获取下一条未处理记录的id,处理它,然后再次调用process()函数,重复这个过程直到没有更多的项目待处理,此时执行将停止。
通过将此脚本放在 Cron 上以每分钟运行一次,我希望此脚本的多个实例都在同时处理项目,因此可以处理 5-10 多个项目,而不是一次处理一个项目同时。
1) 这会按照我的计划进行吗?有什么改进建议/需要注意的地方吗?
2) 我是否应该让脚本为正在运行的实例数设置一个计数器,所以每当 cron 作业启动时,它都会检查计数器,如果有 50 个(?)实例正在运行,它将退出而不进行处理。这可能会通过让太多正在运行的进程占用太多内存来防止服务器崩溃?有什么想法吗?
【问题讨论】:
-
实际上,上面的代码似乎对
limit 0没有做任何事情
标签: php multithreading cron