というのを書いてみました。 といってもTheSchwartzのt/に入ってるdb-common.plからのほとんどコピペですが、 Pluginとか別パッケージで書く場合にあったほうが便利かなーとか思ったので。 こんなのいかが? 追記:codereposにいれてみました (http://coderepos.org/share/browser/lang/perl/TheSchwartz-Test) 追記:coderepos側のソースをみてもらえば十分なのでけしました
Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at
TheSchwartzの概要は分かってきたので、実践投入に向けてより実用的なコードを書いてみます。TheSchwartz::Worker::SendEmailを使ってメールの配信というのが、簡単そう、かつ切実に必要なので、これを試してみました。 まず、PythonとTheSchwartzを媒介するGearmanベースのTheSchwartzを用意します。基本的には昨日言及したコードを利用し、データベースの設定だけ書き換えます。 # myschwartzd use Gearman::Worker; use TheSchwartz; use JSON::Any; my $j = JSON::Any->new; my $ts = TheSchwartz->new(databases => [{ dsn => "dbi:mysql:database=schwartz", user => "root
前々から勉強しなくてはと思っていたGearmanとTheSchwartzで遊んでいます。PythonのGearman Client経由でTheSchwartzにジョブを追加する必要があるのですが、まずはPythonでGearmanのClientとWorkerを書いてみます。Python Gearman bindingにはsixapartのレポジトリのものを使いました。easy_installでインストールできるので楽ですね。 $ easy_install http://code.sixapart.com/svn/gearman/trunk/api/python/lib/ テスト用に書いてみたWorker. # worker.py from gearman import GearmanWorker def echo(job): # Do something print job.arg wor
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
TheSchwartz の worker で、一つの job が worker->grab_for (default 3600) 秒以上掛かる処理をすると、処理中の job を他の worker が掴んでしまう。 具体的には大量のメール送信をしていたんだけど、Data::Valve でスロットリングしてゆっくり送っていたら 1時間以上掛かって、別の worker も同じ job を実行してしまった。結果、同じメールが 2通ずつ出た orz grab_for は job を処理しはじめた worker が、失敗を報告もできないでクラッシュした場合に、別の worker が処理できるようにするもの。しかし送信してしまったメールは取り消せないからな…… package MyWorker; use base qw/ TheSchwartz::Worker /; sub grab_for { 60
MySQLだと問題ないみたい。あと、job の引数に何を渡すかで変わってくるらしい…… [2010-2-16 追記] 追記時点での DBD::Pg と DBD::SQLite の最新版 (DBD::Pg-2.16.1, DBD::SQLite-1.29) では、以下に記述されているメモリリークは解消されています。記事自体は記録の意味も兼ねているので消さずに残しますが、ご注意ください。 ちなみに SQLite 用のスキーマは TheSchwartz 自身に同梱されていて t/schema-sqlite.sql に、PostgreSQL 用のはリポジトリの trunk にあります。doc/schema-postgres.sql 検証用のスクリプトは最後に載せますが、単に client が job を突っ込んで、worker が job を取り出して $job->completed() するだけ
PythonからTheSchwartzを使うならばTheSchwartz::Serviceがよさげ。こいつはHTTP経由でTheSchwartzのジョブを扱えるので、Gearmanを介する必要がないところがよい。sixapartのレポジトリからチェックアウトして、 $ svn co http://code.sixapart.com/svn/Net-Service/trunk Net-Service $ svn co http://code.sixapart.com/svn/TheSchwartz-Service/trunk TheSchwartz-Service TheSchwartz-Service/bin/schwartz-serviceでプロセスを起動。オプションをつければデーモンとして起動させることもできる。 $ perl schwartz-service --help $ per
TheSchwartz の worker を Ctrl-C とか kill で止めた場合に、job の処理が半端な状態で終わられると困る、という話。以前 Deamon::Generic で TheSchwartz の worker をデーモン化する(2) - 酒日記 はてな支店 で諦めたんだけど、ちょっと必要に迫られたので考えてみたら一応できたっぽい。 package MyWorker; use strict; use warnings; use base qw( TheSchwartz::Worker ); sub sighandler { warn "caught signal @_\n"; no warnings 'redefine'; *TheSchwartz::work_once = sub { exit }; } sub work { my ($class, $job) = @
今さらTheSchwartzを使い始めました。 で、jobの状態を監視するWebインターフェースをCatalystで作ることになったのですが、いちいちTheSchwartzのインスタンスを作るのが面倒くさい。 でもそのためにModel作るのもアホらしい。 で、Catalyst::Model::Adaptorを使ってMyApp::Model::TheSchwartzを作ってモデルとして使うのをやってみたのでメモ。 HelperスクリプトでMyApp::Model::TheSchwartzを作成 script/myapp_create.pl model TheSchwartz Adaptor TheSchwartz 出来上がったMyApp::Model::TheSchwartzを変更 package MyApp::Model::TheSchwartz; use strict; use w
Plagger4 月の末に PlaggerLDR にもどった とか言ってたけど、1 時間おきに Plagger まわしてたら、何重にも起動してひどいことになっていて、対策考えるのまんどくさくなってやめてた。1 時間かかっても巡回が終わらない原因は CPU の限界とかではなくて、相手の鯖の反応待ちの積み重ねなので、Plagger を平行動作させればウマーになるのではないかということで、TheSchwartz とくっつけてみることにした。フィード 1 個ごとに Job を 1 個発生させている。また、フィードごとに色々初期化すると重くなる原因なので、最初に読み込んだら読み直さずにずっと使い続けるようにした。Plagger のロード済みの config を書き換える部分は、昔 Catalyst + Plagger で遊んだときのコードそのまんまでうまくいった。eft_worker.pl #!/u
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
TheSchwartz の worker をデーモンにしたくて、どうしようかと。daemontools でもいいんだろうけど、CPAN で見つけた Daemon::Generic を使ってみた。 まず TheSchwartz の client (jobを投入する) と worker (jobを実行する) モジュールを普通に作る。 #!/usr/bin/perl # client.pl use strict; use TheSchwartz; use YAML qw/ LoadFile /; my $client = TheSchwartz->new( %{ LoadFile(shift) } ); $client->insert( 'MyWorker' => { t => time } ); package MyWorker; use strict; use base qw/ TheSch
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く