При попытке использовать DBI в потоках получаю ошибку:thread failed to start: DBD::Sybase::db do failed: handle 2 is owned by thread 814c008 not current thread 845e040 (handles can't be shared between threads and your driver may need a CLONE method added)
Код:
use DBI;
use threads;sub ms_do
{
local @par=@_;
$par[0]->do($par[1]);
}my $mdbh=DBI->connect("dbi:Sybase:server=$server", $login, $pass);
my @thr;push @thr, threads->create(\&ms_do,$mdbh,"delete from $database.$table1");
push @thr, threads->create(\&ms_do,$mdbh,"delete from $database.$table2");foreach my $thread (@thr)
{
$thread->join();
}Соответственно вопрос: Что я делаю не верно? И есть ли возможность использовать многопоточность с DBI в perl?
>[оверквотинг удален]
>push @thr, threads->create(\&ms_do,$mdbh,"delete from $database.$table1");
>push @thr, threads->create(\&ms_do,$mdbh,"delete from $database.$table2");
>
>foreach my $thread (@thr)
>{
> $thread->join();
>}
>
>Соответственно вопрос: Что я делаю не верно? И есть ли возможность использовать
>многопоточность с DBI в perl?причем тут DBI? у вас DBD ругается!
вполне возможно что данный драйвер не позволяет это сделать... посмотрите как он у вас собран. и есть ли вообще у него такаая возможность.попробуйте открыть два дескриптора $mdbh
>Что я делаю не верно?Используете DBI в тредах, хотя известно, что большинство DBD, да и сам DBI не threadsafe
>И есть ли возможность использовать многопоточность с DBI в perl?Ну например обращаться к базе только из одного потока, а остальными ставить ему запросы в очередь.