こういうときはどうやってやるのがいいのかなぁ
・なんか限れられた数のリソース(例えば、DISPLAYとか?、)があって、リソースにはTheSchwartzのWorkerを1対1対応させて、Workerを動かしたい
・Jobをinsertする方はどのWorkerに仕事させるか意識したくない

Jobをinsertする方はこんな
feeder.pl

#!/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

#!/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;

環境変数なのかなぁ

package MyApp::SleepWorker;
use strict;
use warnings;
use base qw/TheSchwartz::Worker/;

sub work {
    my ( $class, $job ) = @_;
    my ($data) = $job->arg;

    my $worker_id = $ENV{WORKER_ID};
    print "[$worker_id]worker start\n";

    my $sleep_time = int(rand(10));
    print "[$worker_id]sleep: $sleep_time\n";
    sleep( $sleep_time );

    print "[$worker_id]end\n";
    $job->completed;
}

1;

boot_worker1, boot_worker2

#!/bin/sh
export WORKER_ID=1
./worker.pl&

#!/bin/sh
export WORKER_ID=2
./worker.pl&
% ./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を意識しながら動けてる