Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中对Gearman工人进行模块化_Perl_Perl Module_Gearman - Fatal编程技术网

在Perl中对Gearman工人进行模块化

在Perl中对Gearman工人进行模块化,perl,perl-module,gearman,Perl,Perl Module,Gearman,我需要在Perl中模块化gearman workers,这样我就可以注册不同的worker函数名及其实现,并重用所有其他代码 use strict; use warnings; use Getopt::Std; use JSON qw( decode_json ); use FindBin qw($Bin); use lib ("$Bin/../blib/lib", "$Bin/../blib/arch"); use Gearman::XS qw(:constants); use Gear

我需要在Perl中模块化gearman workers,这样我就可以注册不同的worker函数名及其实现,并重用所有其他代码

use strict;
use warnings;

use Getopt::Std;
use JSON qw( decode_json );

use FindBin qw($Bin);
use lib ("$Bin/../blib/lib", "$Bin/../blib/arch");

use Gearman::XS qw(:constants);
use Gearman::XS::Worker;

my %opts;
if (!getopts('h:p:t:', \%opts))
{
    usage();
    exit(1);
}

if(!defined($opts{h})) {
    usage();
    exit(1);
}

my $host    = $opts{h} || '';
my $port    = $opts{p} || 4730;
my $timeout = $opts{t} || -1;

my $worker= new Gearman::XS::Worker;

if ($timeout >= 0)
{
    $worker->set_timeout($timeout);
}

my $ret= $worker->add_server($host, $port);
if ($ret != GEARMAN_SUCCESS)
{
    printf(STDERR "%s\n", $worker->error());
    exit(1);
}

#----------------------------------------------------------------------
# Register function
#----------------------------------------------------------------------

$ret= $worker->add_function("do_work", 0, \&do_work, ''); # <-- 1. This function name can be changed
if ($ret != GEARMAN_SUCCESS)
{
    printf(STDERR "%s\n", $worker->error());
}

#----------------------------------------------------------------------
# Wait for job
#----------------------------------------------------------------------

while (1)
{
    my $ret = $worker->work();
    if ($ret != GEARMAN_SUCCESS)
    {
        printf(STDERR "%s\n", $worker->error());
    }
}

#----------------------------------------------------------------------
# Worker Function
#----------------------------------------------------------------------

sub do_work {   # 2. And then this implementation can be changed
    my $job         = shift;

    my $result      = '';
    my $workload    = $job->workload();
    my $params      = decode_json $workload;

    my $input_file  = $params->{'inFile'};
    my $output_file = $params->{'outFile'};
    my $options     = $params->{'options'};
    my $timeout     = $params->{'timeout'};

    # Worker code

    my $ret= $job->send_status(1, 1);
    if ($ret != GEARMAN_SUCCESS)
    {
        return '';
    }

    return $result;
}

#----------------------------------------------------------------------
# Usage
#----------------------------------------------------------------------

sub usage {
    printf("\nusage: %s [-h <host>] [-p <port>]\n", $0);
    printf("\t-h <host>    - job server host\n");
    printf("\t-p <port>    - job server port\n");
    printf("\t-t <timeout> - timeout in milliseconds\n");
}

exit;
WorkerFunction.php

# All the gearman connection and common code goes here
Use ModuleG

$SomeVAR = $worker->add_function("do_new_work", 0, \&do_new_work, '');
do_new_work() {
    # code goes here
}

你能帮助我吗,我该如何处理这段代码。

它与php非常相似

  • 将德语连接代码拆分为.pm文件

  • 添加
    packagemoduleg到顶部和
    1到文件的底部

  • 在ModuleG.pm中创建一个函数以访问worker
    Sub-worker{return$worker;}
    因为从模块中公开变量被认为是错误的做法

  • 调用worker子函数为
    ModuleG->worker()->add_函数(“do_new_work”,0,\&do_new_work,”)并将子对象定义为正常


  • 你想让我们帮你把Perl翻译成PHP吗?