gpt4 book ai didi

perl - Mojolicious 中用于处理不同路径的全局变量和线程

转载 作者:行者123 更新时间:2023-12-04 14:49:25 24 4
gpt4 key购买 nike

在我的 Mojolicious perl 代码中,我处理从远程客户端创建和监视的作业。

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

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

谢谢,简

这是代码:

#!/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使用叉,而不是线程。我建议将数据存储在诸如数据库或 Cache::FastMmap 之类的东西中.

关于perl - Mojolicious 中用于处理不同路径的全局变量和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com