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’的处理程序中使用它. 谢谢,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这样的东西中.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |