3
0

More than 5 years have passed since last update.

マルチプロセスでもカジュアルにデータを共有したい - Test::SharedObject

Posted at

こんにちは!
Perl5 Advent Calender無事に完走することができたようです。ありがとうございます!

拙作のモジュールの紹介をしたいと思います。

マルチプロセスでテストを行いたいケースがときどきあると思います。
たとえば、forkを管理するモジュールをテストしたい場合などです。
そのような場合、結果をプロセス間で共有したい場合があると思います。
そのようなケースで簡単かつアトミックに情報をプロセス間で共有できるのがTest::SharedObjectです。

具体的にはこんな具合で使うことができます。

use strict;
use warnings;

use Test::More tests => 2;
use Test::SharedFork;
use Test::SharedObject;

my $shared = Test::SharedObject->new(0);
is $shared->get, 0;

my $pid = fork;
die $! unless defined $pid;
if ($pid == 0) {# child
    $shared->txn(sub {
        my $counter = shift;
        $counter++;
        return $counter;
    });
    exit;
}
wait;

is $shared->get, 1;

$shared がコンテナになり、データを共有します。(実体はテンポラリファイルです。)
txnメソッドのコールバックの中はプロセス間でアトミックです。
コールバックの第一引数にコンテナのデータが来ます。returnした値でコンテナが更新されます。

このような具合にアトミックにデータの編集ができるとマルチプロセスのテストが楽に書けます。
ぜひご活用ください!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0