LINUX.ORG.RU

PERL + 2 mysql import


0

0

Как сделать одновременное выполнение 2-х заданий на примере insert, чтоб import2 не ждал import1?

use DBI;
my $serverdb = "localhost";
my $dbname = "db";
my $dbuser = "user";
my $dbpass = "passwd";

$insert='fordb.txt';
$insert2='fordb2.txt';

$DBLOG = "$insert";
open (DBLOG,"$DBLOG");
while (<DBLOG>) {
  $tmp_log_line = $_;
  chomp $tmp_log_line;
  push @arr_in,$tmp_log_line;
}
close (DBLOG);

$DBLOG2 = "$insert2";
open (DBLOG2,"$DBLOG2");
while (<DBLOG2>) {
  $tmp_log_line2 = $_;
  chomp $tmp_log_line;
  push @arr_in2,$tmp_log_line2;
}
close (DBLOG2);

sub import1;
sub import2;
$dbh->disconnect;
sub что-то_еще;

sub import1
{
$dbh = DBI->connect("DBI:mysql:host=$serverdb;database=$dbname", "$dbuser", "$dbpass");
$insert = "INSERT INTO db1.table (row) VALUES (?)";
$sth1 = $dbh->prepare("$insert");
while(@arr_in){$line_in = shift @arr_in;$sth1->execute ($line_in)}
$sth1->finish;
}
sub import2
{
$dbh = DBI->connect("DBI:mysql:host=$serverdb;database=$dbname", "$dbuser", "$dbpass");
$insert2 = "INSERT INTO db2.table (row) VALUES (?)";
$sth2 = $dbh->prepare("$insert2");
while(@arr_in2){$line_in2 = shift @arr_in2;$sth2->execute ($line_in2)}
$sth2->finish;
}

★★

Ответ на: комментарий от lioncub

вот лентяй, однако код гамняв немного, не забывай про use strict;, переделывать влом, но навскидку вот вроде так

#!/usr/bin/perl

use DBI; use warnings;

my $serverdb = "localhost"; my $dbname = "db"; my $dbuser = "user"; my $dbpass = "passwd";

$insert='fordb.txt'; $insert2='fordb2.txt';

$DBLOG = "$insert"; open (DBLOG,"$DBLOG"); while (<DBLOG>) { $tmp_log_line = $_; chomp $tmp_log_line; push @arr_in,$tmp_log_line; } close (DBLOG);

$DBLOG2 = "$insert2"; open (DBLOG2,"$DBLOG2"); while (<DBLOG2>) { $tmp_log_line2 = $_; chomp $tmp_log_line; push @arr_in2,$tmp_log_line2; } close (DBLOG2);

sub import1 { $dbh = DBI->connect("DBI:mysql:host=$serverdb;database=$dbname", "$dbuser", "$dbpass"); $insert = "INSERT INTO db1.table (row) VALUES (?)"; $sth1 = $dbh->prepare("$insert"); while(@arr_in) { $line_in = shift @arr_in;$sth1->execute ($line_in) } $sth1->finish; $dbh1->disconnect; }

sub import2 { $dbh = DBI->connect("DBI:mysql:host=$serverdb;database=$dbname", "$dbuser", "$dbpass"); $insert2 = "INSERT INTO db2.table (row) VALUES (?)"; $sth2 = $dbh->prepare("$insert2"); while(@arr_in2) { $line_in2 = shift @arr_in2;$sth2->execute ($line_in2) } $sth2->finish; $dbh2->disconnect; }

my $pid = fork(); if ($pid == 0) { &import1; exit(0); } else { &import2; }

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.