我有一个用 PHP 编写的齿轮工,它会回显一些东西并睡几秒钟。我启动了这个工人的两个实例,当我现在运行 gearman 几次来完成这项工作时,只有一个工人(我开始的最后一个)被执行——从不执行另一个,尽管客户必须等到这个工人已经完成了他的工作。我在这里做错了什么,还是齿轮人应该如何表达的想法?
# cat ./testworker.php
<?php
$Worker = new \GearmanWorker;
$Worker->addServers('127.0.0.1:4730');
$Worker->addFunction('test', 'work');
while ($Worker->work() || $Worker->returnCode() == GEARMAN_TIMEOUT) {
if ($Worker->returnCode() != GEARMAN_SUCCESS)
break;
}
function work()
{
echo getmypid();
sleep(1);
}
然后我用命令在两个控制台中启动了worker
# php ./testworker.php
然后我几次运行 gearman 来完成这项工作:
# gearman -f test -s
是不是我需要 gearman 守护进程的 -t 选项?我正在开发 OS-X。
# ps ax | grep gearman
4128 ?? Ss 0:00.02 /opt/local/bin/daemondo --label=gearmand --start-cmd /opt/local/sbin/gearman
4129 ?? S 0:00.04 /opt/local/sbin/gearmand -vv --port=4730 -u root --pid-file=/opt/local/var/r
4250 p5 S+ 0:00.01 grep gearman
顺便说一句:如何更改守护进程控制进程中的任何选项?我更改了 /opt/local/etc/LaunchDaemons/org.macports.gearmand/org.macports.gearmand.plist 但我认为我需要执行一个重新读取列表的命令。