[Moscow.pm] perl cross-thead db con pool

Ruslan Zakirov ruz на bestpractical.com
Пт Фев 8 09:08:49 PST 2013


2013/2/8 Daniel Podolsky <onokonem на gmail.com>:
> День добрый!
>
> хочу пул коннектов к базе, и, мало того - хочу его один на несколько тредов.
>
> Бывает ли так в современном перле?

Не понимаю проблемы. Что вы сделали и что у вас не получилось?

У меня нет треженого перла, но вот форки шарят пул из трех коннектов:

use strict;
use warnings;
use DBI;
use Time::HiRes 'sleep';

my @pool;
push @pool, DBI->connect('dbi:mysql:', 'root', undef, { RaiseError  => 1 })
    for 1..3;

for (1..10) {
    child() unless fork;
}
1 while wait > 0;

sub child {
    print "child: $$\n";
    $_->{'InactiveDestroy'} = 1 foreach @pool;

    my $i = int rand @pool;
    for (1..15) {
        my $tables = $pool[$i]->selectcol_arrayref(
            "select table_name from INFORMATION_SCHEMA.TABLES WHERE
table_schema = ?",
            undef, 'mysql',
        );
        print "$i: $$: ". join (',', @{$tables}[0..2]) ."...\n";
        sleep rand 0.3;
    }
    print "done: $$\n";
    exit;
}

Есть проблема с InactiveDestroy. У меня он почему-то блокирует
приложение в конце, но без него тоже нельзя. Нуно баг репортить и
смотреть внимательней.

> Спасибо.
>
> С уважением,
> Даниил Подольский
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm