PHP GearmanClient::doBackground 只是挂起
PHP GearmanClient::doBackground just hangs
Mehod doBackground of GearmanClient 及其后代,如 doLowBackground 和 doHighBackground 有时会挂起。我不知道为什么。
php 5.4
Gearman server version 1.1.18
Gearman php lib version 1.1.2
在某个时间点,用户单击按钮,任务(超过 700 个)转到 gearman。 DoBackground随机冻结,它可以在20个任务放入gearman后挂起,也可以在200-300,也许500个任务后挂起。
我在 gearman/php 日志中没有看到错误,也没有在直接 link 中看到错误(当我直接开始调试时)
当我尝试调试时,我只是将任务数减少到 50,并直接从浏览器发出请求。如果一切顺利,浏览器的圆圈(加载动作)会消失,我会看到我的 var_dumps。但是如果在某些任务中doBackground没有return控制,浏览器请求进入无限循环,等待服务器响应
我的代码很简单。我收集数据,放入数组,然后一个一个发送到队列
for($i = 0; $i < count($itemsToProcess); $i++) {var_dump($i);
$method = array_shift($itemsToProcess[$i]['methodsAfter']);
Yii::app()->gearman->client()->doBackground($method, json_encode($itemsToProcess[$i]));
}
作为附加信息,我有另一台服务器
php 7.1
已安装,
server version is 1.1.12
,以及
libgearman for php was auto installed with yum
。似乎有同样的问题,但是!!!它很少出现。
当然这是很关键和非常关键的问题,如果你发出 A 计数而 B 计数进入队列。
P.S:环境不同的原因是我们还是不能迁移到php7。 Php5.4 是产品,php7 是开发
不是 gearmand,也不是 php 扩展问题
客户端初始化应该在循环之外进行。我遇到了同样的问题。
当您在循环中启动时,内存会耗尽。希望对您有所帮助!
Mehod doBackground of GearmanClient 及其后代,如 doLowBackground 和 doHighBackground 有时会挂起。我不知道为什么。
php 5.4
Gearman server version 1.1.18
Gearman php lib version 1.1.2
在某个时间点,用户单击按钮,任务(超过 700 个)转到 gearman。 DoBackground随机冻结,它可以在20个任务放入gearman后挂起,也可以在200-300,也许500个任务后挂起。
我在 gearman/php 日志中没有看到错误,也没有在直接 link 中看到错误(当我直接开始调试时)
当我尝试调试时,我只是将任务数减少到 50,并直接从浏览器发出请求。如果一切顺利,浏览器的圆圈(加载动作)会消失,我会看到我的 var_dumps。但是如果在某些任务中doBackground没有return控制,浏览器请求进入无限循环,等待服务器响应
我的代码很简单。我收集数据,放入数组,然后一个一个发送到队列
for($i = 0; $i < count($itemsToProcess); $i++) {var_dump($i);
$method = array_shift($itemsToProcess[$i]['methodsAfter']);
Yii::app()->gearman->client()->doBackground($method, json_encode($itemsToProcess[$i]));
}
作为附加信息,我有另一台服务器
php 7.1
已安装,
server version is 1.1.12
,以及
libgearman for php was auto installed with yum
。似乎有同样的问题,但是!!!它很少出现。
当然这是很关键和非常关键的问题,如果你发出 A 计数而 B 计数进入队列。
P.S:环境不同的原因是我们还是不能迁移到php7。 Php5.4 是产品,php7 是开发
不是 gearmand,也不是 php 扩展问题
客户端初始化应该在循环之外进行。我遇到了同样的问题。 当您在循环中启动时,内存会耗尽。希望对您有所帮助!