在 PHP 中,可以使用多进程来处理任务。下面是一个简单的示例,使用 pcntl_fork() 函数创建子进程来处理任务:
<?php
$tasks = ['task1', 'task2', 'task3', 'task4', 'task5']; // 任务列表
foreach ($tasks as $task) {
    $pid = pcntl_fork(); // 创建子进程
    if ($pid == -1) {
        // 创建子进程失败
        die('Could not fork');
    } elseif ($pid) {
        // 父进程
        // 继续处理下一个任务
        continue;
    } else {
        // 子进程
        // 处理任务
        echo "Processing task: $task" . PHP_EOL;
        sleep(2); // 模拟处理任务的耗时
        exit(); // 子进程处理完任务后退出
    }
}
// 等待所有子进程结束
while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);
    echo "Child process $status completed" . PHP_EOL;
}
在上面的示例中,我们首先定义了一个任务列表 $tasks,然后使用 foreach 循环遍历每个任务。在循环中,我们使用 pcntl_fork() 函数创建子进程。
如果 pcntl_fork() 返回 -1,则表示创建子进程失败,此时我们可以选择退出或者进行错误处理。
如果 pcntl_fork() 返回 0,则表示当前进程是子进程,我们可以在子进程中处理任务。
如果 pcntl_fork() 返回一个大于 0 的值,则表示当前进程是父进程,我们可以继续处理下一个任务。
在子进程中,我们可以执行具体的任务处理逻辑。在示例中,我们简单地输出任务名称并休眠 2 秒模拟任务处理的耗时。
在父进程中,我们使用 pcntl_waitpid() 函数来等待子进程结束,并使用 pcntl_wexitstatus() 函数获取子进程的退出状态。最后输出子进程的完成信息。
注意:在使用多进程处理任务时,需要确保你的 PHP 环境支持 pcntl 扩展。
上一篇:PHP多进程(3)信号
下一篇:PHP日期时间处理
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站