加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – Mojolicious中的Globals和Threads用于处理不同的路径

发布时间:2020-12-16 06:26:00 所属栏目:大数据 来源:网络整理
导读:在我的Mojolicious perl代码中,我处理从远程客户端创建和监视的作业. 我将作业保存在一个哈希数组中,这是一个全局变量. 然后在PUT’/ job / create’和GET’/ job / status’的处理程序中使用它. 使用PUT’/ job / create’添加新作业时,数组会获得 在子程序
在我的Mojolicious perl代码中,我处理从远程客户端创建和监视的作业.

我将作业保存在一个哈希数组中,这是一个全局变量.

然后在PUT’/ job / create’和GET’/ job / status’的处理程序中使用它.
使用PUT’/ job / create’添加新作业时,数组会获得
在子程序中扩展(它包含下面代码中的4个元素),
但是当通过GET’/ job / status’请求作业的状态时,列表
作业,数组不包含添加的元素(它计数2
元件).

谢谢,Jan

这是代码:

#!/usr/bin/perl -w

use threads; 
use threads::shared; 
use Mojolicious::Lite; 
use Mojo::JSON; 
my (%record,%job1,%job2,%job3,@jobs) : shared; 

%job1 = ( id=>"id1"); 
%job2 = ( id=>"id2"); 
%job3 = ( id=>"id3"); 

push ( @jobs,%job1 ); 
push ( @jobs,%job2 ); 

app->config(hypnotoad => {listen => ['http://*:3000']}); 

put '/job/create' => sub { 
    my $self = shift; 
    my $obj = Mojo::JSON->decode( $self->req->body ); 
    my $id = $obj->{id}; 
    %record = (id => $id); 
    push ( @jobs,%record ); # test the global prefilled 
    push ( @jobs,%job3 );   # test the global locally filled 
    $self->render(text => "Created job id $id. Jobs count: " . 
$#jobs ); 
}; 

get '/job/status' => sub { 
    my $self = shift; 
    my $out = "["; 
    for(my $i=0; $i<$#jobs+1; $i++) { 
        $out .= "{id:""  . $jobs[$i]{id}      . "","; 
        $out .= "," if $i<$#jobs; 
    } 
    $out .= "]"; 
    $self->render(text => "allJobsInfo($out). Num jobs: " . $#jobs); 
};

app->start();

解决方法

这不会真正起作用,因为 hypnotoad使用的是fork,而不是线程.我建议将数据存储在像数据库或 Cache::FastMmap这样的东西中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读