我必须处理更多大量的图像,(10 mb /图像)
如何确定处理队列中所有图像的执行时间?
根据我们拥有的数据确定时基。
设定时限。
运行流程。
执行时间取决于什么? (服务器,互联网速度,数据类型......?)
@All: 我改变了我的方式去做我的问题,发送1reqeust / 1image,
所以有40个图像,我们将有40个请求。无需关心执行时间:D
由于
答案 0 :(得分:1)
您可以使用代码
测试您的设置// first image
$start = time();
// ... work on image ...
$elapsed = time() - $start;
if (ini_get('max_execution_time') > $elapsed * $imageCount)
trigger_warning("may be not able to finish in time", E_USER_WARNING);
请注意两件事:在PHP的CLI版本中,max_execution_time被硬编码为0 / inifinity(根据this comment)。此外,您可以通过再次呼叫set_time_limit()
来重置计时器,如下所示:
foreach ($imagelist as $image) {
// ... do image work ....
// reset timer to 30
set_time_limit(30);
}
这样,您可以让脚本永久运行,或者至少在您完成图像处理之前运行。您必须在apache-configuration中启用相应的覆盖规则,以通过AllowOverride All
答案 1 :(得分:0)
我建议(考虑到您在问题中的有限信息),您尝试使用试错法 - 运行您的流程并查看需要多长时间 - 在完成之前增加时间限制 - 您可以缩短过程
答案 2 :(得分:0)
请注意,服务器处理时间可能会有很大差异,具体取决于服务器上当前从其他进程加载的负载。如果它是共享服务器,其他一些用户可以在这个时间运行一些脚本,使你的脚本只执行一半。
我认为在脚本运行之前很难确定执行时间。
我会上传批量(小组)图片。图像的数量取决于一些测试。
例如,从不同的页面同时运行您的脚本几次以查看它们是否仍然完整而不会中断。如果它与队列中的5个图像一起使用,请编写脚本以处理5个图像。处理完前五张图像后,将它们存储起来(写入数据库或任何你需要的东西),稍等一下再拍下5张图像。
如果在运行三个脚本同时运行5个图像时它们可以正常工作,那么无论服务器上的其他用户做什么,你都应该安全地做一次。
您更改文件php.ini
中的时间执行时间限制,或者如果您无权访问该文件,则可以使用set_time_limit(600)
动态设置该文件600秒。然而,我会编写更智能的代码而不是依赖时间限制。