Господа, помогите в таком вопросе.
мне надо написать скрипт который обрабатывает записи из таблицы, но т.к. обработка одной записи процесс не быстрый (но и не загружающий процессор) я хотел сделать несколько fork() и в дочерних процессах разбираться с массивом результатов селекта.
примерный код:
#!/usr/bin/perl
use DBI;
$ENV{"ORACLE_HOME"}="/usr/local/oracle/orahome";
$ENV{"NLS_LANG"}="american_AMERICA.cl8mswin1251";
$ENV{"ORACLE_SID"}="etc434";
$ENV{"ORACLE_OWNER"}="oracle";
$ENV{"ORACLE_BASE"}="/opt/oracle/etc434db";
die "Couldn't connect to database: " . DBI->errstr if(!($dbh = DBI->connect('DBI:Oracle:etc434','www','password')));
$sql = "select DOMAIN_NAME from nwww.contact_information_domains where STATUS = 0 ";
die "Couldn't prepare statement: " . $dbh->errstr if(!($sth = $dbh->prepare($sql)));
$sth->execute();
for ($i = 1; $i <=5 ; $i++){
if (!defined($pid = fork())) {
die "cannot fork: $!" ;
} elsif(!$pid) {
while (@data = $sth->fetchrow_array()) {
# здесь код обработки @data ;
}
} else {
$lastpid = $pid ;
undef $pid ;
}
}
waitpid($lastpid, 0) ;
sth->finish();
dbh->disconnect();
проблема в том что все 5 процессов делают fetchrow_array() паралельно. т.е. все 5-ть обрабатывают одну и туже строку ( и потом вместе переходят к следующей). вместо вечного двигателя получился вечный тормоз :(
как это можно исправить ?
возможно это не правильно решение моей задачи, подскажи пожалуста более правильное.