PHP - 多处理(使用不同的核心)

时间:2014-06-30 10:55:54

标签: php multiprocessing

我正在用PHP编写一个Cron,它应该每小时运行一次,它应该将目录中的最后10个视频转换为mp4格式。

问题是每个视频在15分钟内的转换时间,因此在一小时内,只有4个视频被转换。

我有四核CPU,因此,我想在PHP中尝试多处理。我希望将每个视频分配到一个核心,以便并行转换4个视频。

因此,第一批将同时进行4次视频转换,并将在15分钟内完成。第二批将同时进行接下来的4次视频转换,并在接下来的15分钟内完成。

最后2个视频将在接下来的15分钟内同样转换。因此,通过使用多处理模型,可以在45分钟内转换10个视频,这对我有用。

那么我如何在PHP中实现MultiProcessing?我在php中读了一些关于pecl线程的信息,但我确保多线程实际上会使用我CPU的所有4个内核。

1 个答案:

答案 0 :(得分:3)

最简单的方法是多次运行脚本而不用担心多处理:

1  *   *     *     * php /path/to/script
2  *   *     *     * php /path/to/script
3  *   *     *     * php /path/to/script
4  *   *     *     * php /path/to/script


15  *   *     *     * php /path/to/script
16  *   *     *     * php /path/to/script
17  *   *     *     * php /path/to/script
18  *   *     *     * php /path/to/script

使用flock()让脚本知道要处理的文件:

foreach(glob('dir/*.avi') as $file) {
    $lockfile = fopen($file . '.lock', 'a+');
    if(flock($lockfile)) {
        // do the processing
        break;
    }
}