Posted in: ,
By Unknown 0 comments

TheSchwartz

為了想要建構一個Job Queue的系統,從好幾個月前就一直在看及思考怎樣的方案會比較好,後來因為手邊的程式大都數都以perl撰寫,所以就決定在perl的套件當中尋找。本來是想要利用proc-fork這類的套件去做實現,但是後來發現雖然這樣的套件很多,但是在工作submit出去之後,仍然沒有一個管理的機制去對排程的工作去做管理,而且怎樣去管理這些worker也是一個問題。

後來東看看西瞧瞧找到了這東西,這一兩個禮拜大概試出了一點東西,所以稍微紀錄。

安裝&基本跑法

大概的過程我全都寫在我的github上面,其實還滿簡單的

排程器

這邊我目前想到這樣做,先把要執行的工作包成一個worker,大概內容差不多如下
Loading ....
然後主要的程式如下
Loading ....
接著如果是要在command line下操作,只要利用list_jobs這類的function就可以把目前正在執行的工作顯示出來,稍微可以達到我想要的工作監控的情形。接著在web端,我利用mojo寫一個簡單的程式去顯示目前正在跑的工作,大概類似下面

 15 get '/job' => sub {
 16     my $self = shift;
 17
 18     my $client = TheSchwartz->new( databases =>
 19         [{
 20             dsn => $db_set->[0]{dsn},
 21             user => $db_set->[0]{user},
 22             pass => $db_set->[0]{pass}
 23         }]
 24     );
 25
 26     my @all = $client->list_jobs(
 27         { funcname => ['Process2','Process1']}
 28     );
 29
 30     $self->render('job', 'job' => \@all);
 31 };
 .
 .
 55 __DATA__
 56 @@ job.html.ep
 57 <!DOCTYPE html>
 58 <html>
 59     <body>
 60         <h1>THis is Hello</h1>
 61         The magic numbers are <%= $job %>
 62         <ul>
 63         % foreach my $j (@$job) {
 64             <li><%= $j->jobid %></li>
 65         % }
 66         </ul>
 67     </body>
 68 </html>
其實還有像是gearman這樣很多人在用的工作排程器,只可惜他工作丟出去了我不曉得要怎樣管理執行狀況(或許是我沒看到也說不定),不然他在各種語言上都有實作,也是個很不錯的選擇。有看到另外一種用法是用gearman丟工作到TheSchwartz,不過我現在還不明白為何要這樣做的原因。

接著就是要寫網頁的控制端,先筆記一下mojo::templatewiki,之後可能還會花些時間k他的表示法。

Leave a Reply