很简单,我有一个程序需要执行一个大型进程(从 5 秒到几分钟不等),我不想让我的页面等待进程完成加载。
我知道我需要将这个 Gearman 作业作为后台进程运行,但我正在努力确定正确的解决方案,以获取关于工作人员何时真正完成进程的实时状态更新。我使用了 PHP 示例中的以下代码片段:
do {
sleep(3);
$stat = $gmclient->jobStatus($job_handle);
if (!$stat[0]) // the job is known so it is not done
$done = true;
echo "Running: " . ($stat[1] ? "true" : "false") . ", numerator: " . $stat[2] . ", denomintor: " . $stat[3] . "\n";
} while(!$done);
echo "done!\n";
这是可行的,但是当工作人员完成告诉工作要做什么时,它似乎只是将数据返回给客户端。相反我想知道什么时候job
完成的字面过程。
我现实生活中的例子:
- 从 API 中提取多个数据提要(某些提要比其他提要花费更长的时间)
- 加载几个总是快速加载的,在发送到工作队列的部分放置“等待/加载”动画
- 当工作完成并完全检索结果时,将动画替换为结果