标签: gearman

与PHP的Gearman - 在工作者的螺纹

我有一个Gearman和PHP工作者的问题.我想同时运行相同的功能.但是现在Gearman似乎把它排成了队.

我正在搜索的输出是:

$ ./daemon.php  
Starting daemon...
Received job: H:www-dev1:15 
Received job: H:www-dev1:16 
Finished
Finished
Run Code Online (Sandbox Code Playgroud)

但是当前代码的输出是:

$ ./daemon.php  
Starting daemon...
Received job: H:www-dev1:15 
Finished
Received job: H:www-dev1:16 
Finished
Run Code Online (Sandbox Code Playgroud)

是否可以使用pcntl_fork()来分叉GearmanWorker?

客户:

$client = new GearmanClient();
$client->addServer();

$args = array('test' => 'test1');
$args = serialize($args);

$client->doBackground('test', $args);
sleep(1);
$client->doBackground('test', $args);

echo "Done";
Run Code Online (Sandbox Code Playgroud)

工人:

#!/usr/bin/php
<?php

echo "Starting daemon..." . PHP_EOL;

$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('test', 'testFunc');

while ($worker->work()) {
}

function testFunc($job) {

    echo "Received job: " . $job->handle() . PHP_EOL;
    sleep(10); …
Run Code Online (Sandbox Code Playgroud)

php multithreading fork gearman

4
推荐指数
1
解决办法
2131
查看次数

如何在Mac OS X上安装libuuid?

我正在尝试在Mac上编译gearman-0.28,但遇到以下错误:

configure: error: Unable to find libuuid
Run Code Online (Sandbox Code Playgroud)

我不知道如何在Mac上安装libuuid,我的Mac是10.7.2版本.任何人都可以帮助我吗?提前致谢.

macos gearman

4
推荐指数
3
解决办法
7592
查看次数

测试以查看Gearman守护程序是否正在运行

我想查看Gearman守护程序是否正在运行.然后才运行任务,以便我的应用程序不会崩溃.

这是我的代码:

$daemonRunning = true;

while( true )
{
    try
    {
        Yii::app()->gearman->client->ping( true );

        if ( $daemonRunning === false )
        {
            echo "Daemon back online. Starting signature process...\n";
        }

        Yii::app()->gearman->client->runTasks();
    }
    catch( GearmanException $e )
    {
        echo "Daemon appears to be down. Waiting for it to come back up...\n";
        $daemonRunning = false;
    }
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

但问题是ping不会抛出异常,它会抛出一个致命的错误:

PHP Error[2]: GearmanClient::ping(): flush(GEARMAN_COULD_NOT_CONNECT) 127.0.0.1:4730 -> libgearman/connection.cc:673
Run Code Online (Sandbox Code Playgroud)

虽然奇怪的是,如果我删除ping并仅使用runTasks,则抛出异常.

有关:

当进程运行时Gearman守护程序关闭时,如何处理错误?当我关闭Gearman守护进程时,我从PHP得到以下错误:

php: libgearman/universal.cc:481: gearman_return_t connection_loop(gearman_universal_st&, const gearman_packet_st&, Check&): Assertion …
Run Code Online (Sandbox Code Playgroud)

php daemon worker gearman

4
推荐指数
1
解决办法
5588
查看次数

如何使用PHP扩展安装Gearman

我正在尝试使用PHP扩展安装Gearman以将其与PHP-CLI一起使用.

我安装了Debian 6.0.5 php5-cliphp-pear安装了.

多数民众赞成我尝试过的

# apt-get install php5-dev
# apt-get install gearman-job-server libgearman-dev
# pecl install gearman
Run Code Online (Sandbox Code Playgroud)

这就是我在控制台上看到的内容 pecl install

downloading gearman-1.1.1.tgz ...
Starting to download gearman-1.1.1.tgz (30,896 bytes)
.........done: 30,896 bytes
3 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
building in /tmp/pear/temp/pear-build-rootAccnyQ/gearman-1.1.1
running: /tmp/pear/temp/gearman/configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for …
Run Code Online (Sandbox Code Playgroud)

php install compilation gearman

4
推荐指数
3
解决办法
2万
查看次数

PHP中的异步数据库/服务调用:Gearman与pthreads

在我们的LAMP站点上,我们遇到一些问题,一些服务必须多次调用数据库来提取数据.通常这种方式在PHP中完成(至少我的经验)是连续的; 这显然效率低下.我们可以通过使用缓存和聚合某些查询来缓解一些低效问题; 但在某些情况下,我们仍然需要进行多个数据库调用.

理想情况下,我会尽可能多地同时向db或Web服务发送尽可能多的请求,但PHP似乎并不支持开箱即用的模式.这些是我知道要完成此任务的变通方法.

我们目前使用Gearman来处理异步任务.我可以将一些服务重写为Gearman任务,并使用它来对数据库和服务进行异步调用.然而,我们在使用Gearman消耗大量过程和记忆方面遇到了不好的经历; 强制使用在某些情况下重启我们的生产服务器,因为它们没有响应.但是,我相信由于脚本中的一些错误我能够跟踪这个问题,并且相信我已经修复了它.但是我觉得如果我们使用Gearman作为处理异步任务的任务池/管理器,这种不稳定性和过多的资源消耗可能会再次出现问题.

或者,我正在看pthreads.它似乎是一个更好的选择,因为它不需要运行Gearman守护进程来工作,它完成了我想要的.甚至似乎还有一个像样的框架,amphp.我们决定配置一个启用了pthreads的测试服务器.但是,我们不知道的是pthreads需要更改我们的Apache配置,特别是从httpd(又名prefork)转到httpd.worker.不可否认,我不是一位经验丰富的Apache管理员,所以我甚至不确定进行此项更改的后果是什么.因此,现在我对使用它犹豫不决,至少在我有时间研究这个之前.

所以我的问题是,如果我想在PHP中执行异步请求,我是否应该坚持使用Gearman知道我可能遇到问题,或者我应该冒险使用pthreads,即使它似乎需要更改我的Apache配置我坦率地说,不知道它会如何影响我们的网站?或者,也许,我正在尝试做的事情还有另一种选择,我还不知道.

服务器配置:

  • PHP 5.6.1
  • Apache 2.4.12
  • 红帽企业版6.3
  • MySQL 5.5.28
  • 8GB RAM

php mysql apache asynchronous gearman

4
推荐指数
1
解决办法
514
查看次数

不断运行的Gearman工人

我有一个过程,我希望能够在任何时候启动Gearman客户端在后台运行.

我通过打开两个到我的服务器的SSH连接找到了成功,一个启动了worker,另一个启动了运行客户端.这产生了所需的输出.

问题在于,我希望工作人员在后台不断运行,这样我就可以在需要完成流程时调用客户端.但是当我关闭运行工作程序PHP文件的终端时,对客户端的调用不起作用 - 工作者似乎死了.

有没有办法让工作人员在后台不断运行,因此调用新客户端无需启动新工作人员即可运行?

谢谢!

php gearman

3
推荐指数
1
解决办法
2342
查看次数

如何在Windows操作系统中配置或安装GEARMAN?

我想在项目中实现"GEARMAN",但我不知道如何在Windows操作系统中安装或配置"GEARMAN".任何人都可以提供我可以与"GEARMAN"合作的链接吗?

windows gearman python-gearman

3
推荐指数
1
解决办法
7505
查看次数

用C创建一个Gearman Worker

我一直在尝试使用他们的C API(libgearman)实现Gearman工作者.但是他们的C API文档很差而且不完整.虽然它非常类似于使用其他语言(如PHP)创建工作程序,但我仍然无法通过*gearman_worker_add_function();*在工作程序中注册函数;*

具体来说,我无法找到如何创建*gearman_worker_fn*的对象.

谢谢!

c api gearman

3
推荐指数
1
解决办法
1292
查看次数

将多个变量传递给Gearman工作器函数

如何将两个变量传递给同一个worker函数?例如,假设我希望连接从客户端传递的两个字符串.我在一些示例代码中看到了一个正在使用的数组,但我无法让它工作.

<?php
$client= new GearmanClient();
$client->addServer();

$arguments = array(
      "string1" => "hey",
      "string2" => "there"
);
$client->addTask("string_concat", $arguments);
$client->runTasks();
?>
Run Code Online (Sandbox Code Playgroud)

这告诉我这是一个无效的工作负载(我假设它是一个传递的数组).我应该如何传递它们 - 我应该为每个创建任务吗?

然后,如果我不能发送数组,我怎么能在worker函数中使用多个变量.我尝试了类似函数String_Concat($ job,$ job2),但后来我不确定如何将它们添加到工作负载()

这是一些示例代码,如果我能够传递数组:

<?php

$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("string_concat", "String_Concat");
while ($worker->work());

function String_Concat($job)
{
    $arguments = $job->workload();
    return $arguments["string1"] . $arguments["string2"];
}
?>
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?非常感谢!

php gearman

3
推荐指数
1
解决办法
3863
查看次数

Gearman 删除工人功能

我想从我的齿轮工作人员那里清除经过测试的功能。您知道如何从 CLI 或 PHP 管理它吗?

这是屏幕截图,您肯定会知道我想在不重新启动齿轮服务器的情况下删除哪一个。

http://cl.ly/image/0I3Y3g0A361J

提前致谢。此致!

php queue worker command-line-interface gearman

3
推荐指数
1
解决办法
2084
查看次数