[perl]TheSchwartzのWorkerにIDをつける
Posted on 7月 26, 2008
Filed Under perl |
こういうときはどうやってやるのがいいのかなぁ
・なんか限れられた数のリソース(例えば、DISPLAYとか?、)があって、リソースにはTheSchwartzのWorkerを1対1対応させて、Workerを動かしたい
・Jobをinsertする方はどのWorkerに仕事させるか意識したくない
Jobをinsertする方はこんな
feeder.pl
PERL:
-
#!/usr/bin/env perl
-
use strict;
-
use warnings;
-
use FindBin;
-
use File::Spec;
-
use YAML::Syck;
-
use TheSchwartz;
-
-
my $conf = LoadFile( File::Spec->catfile($FindBin::Bin, '..', 'myapp.yml') );
-
my $pool = TheSchwartz->new( %{ $conf->{TheSchwartz}{args} } );
-
$pool->insert('MyApp::SleepWorker');
-
1;
0~9秒間の間でランダムな秒数寝るだけのWorkerを起動させるpl。
こいつを複数プロセス動かして、それぞれは自分に割り当てられてるリソースを知っている、っていう状態をつくりたい。
workの引数になんか入れてもだめっぽいので、、
worker.pl
PERL:
-
#!/usr/bin/env perl
-
use strict;
-
use warnings;
-
-
use FindBin;
-
use File::Spec;
-
use lib File::Spec->catfile( $FindBin::Bin, '..', 'lib' );
-
use YAML::Syck;
-
use TheSchwartz;
-
use MyApp::SleepWorker;
-
-
my $conf = LoadFile( File::Spec->catfile($FindBin::Bin, '..', 'myapp.yml') );
-
my $worker = TheSchwartz->new( %{ $conf->{TheSchwartz}{args} } );
-
$worker->can_do('MyApp::SleepWorker');
-
$worker->work;
-
-
1;
環境変数なのかなぁ
PERL:
boot_worker1, boot_worker2
CODE:
-
#!/bin/sh
-
export WORKER_ID=1
-
./worker.pl&
-
-
#!/bin/sh
-
export WORKER_ID=2
-
./worker.pl&
CODE:
-
% ./boot_worker1; ./boot_worker2
-
% ./feeder.pl; ./feeder.pl;./feeder.pl; ./feeder.pl;./feeder.pl; ./feeder.pl;./feeder.pl; ./feeder.pl;
-
[2]worker start
-
[2]sleep: 8
-
[1]worker start
-
[1]sleep: 4
-
[1]end
-
[1]worker start
-
[1]sleep: 9
-
[2]end
-
[2]worker start
-
[2]sleep: 5
-
[2]end
-
[1]end
-
[2]worker start
-
[2]sleep: 9
-
[1]worker start
-
[1]sleep: 8
-
[1]end
-
[1]worker start
-
[1]sleep: 8
-
[2]end
-
[2]worker start
-
[2]sleep: 2
-
[2]end
-
[1]end
自分のIDを意識しながら動けてる
Comments
Leave a Reply