我正在用PHP编写一个Cron,它应该每小时运行一次,它应该将目录中的最后10个视频转换为mp4格式。
问题是每个视频在15分钟内的转换时间,因此在一小时内,只有4个视频被转换。
我有四核CPU,因此,我想在PHP中尝试多处理。我希望将每个视频分配到一个核心,以便并行转换4个视频。
因此,第一批将同时进行4次视频转换,并将在15分钟内完成。第二批将同时进行接下来的4次视频转换,并在接下来的15分钟内完成。
最后2个视频将在接下来的15分钟内同样转换。因此,通过使用多处理模型,可以在45分钟内转换10个视频,这对我有用。
那么我如何在PHP中实现MultiProcessing?我在php中读了一些关于pecl线程的信息,但我确保多线程实际上会使用我CPU的所有4个内核。
答案 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;
}
}