Witam, Skrypty Perl w LMS wykonywane są w jednym wątku. W Perlu 5.10 da się podzielić zadania na wątki. Dla potomnych mających wieloprocesorowe serwerki i dużo klientów wycinek z lms-sendinvoice przerobiony na dwa wątki (tylko dal MySQL):
my $thr1 = threads->new(&senda,"1",$end); my $thr2 = threads->new(&senda,$end); $thr1->join; $thr2->join;
sub senda{ my @parametry = @_;
my $start=$parametry[0]; my $end=$parametry[1]; my $dbase = DBI->connect("DBI:mysql:database=$dbname;host= $dbhost","$dbuser","$dbpasswd", { RaiseError => 1 }); $dbase->do("SET NAMES utf8");
my $queryend=""; if($end) { $queryend="AND d.customerid<$end"; } my $send_dbq = $dbase->prepare("SELECT d.id, d.number, d.cdate, c.email, d.name, d.customerid, n.template FROM documents d LEFT JOIN customers c ON (c.id = d.customerid) LEFT JOIN numberplans n ON (n.id = d.numberplanid) $groupjoin WHERE c.deleted = 0 AND d.type = 1 AND c.email != '' AND d.cdate >= $daystart AND d.cdate <= $dayend AND c.invoicenotice = 1 AND d.customerid>$start $queryend $groupwhere"); $send_dbq->execute(); while(my $send_row = $send_dbq->fetchrow_hashref()) { ............... return; }#zamknięcie sub W zasadzie ma jeden słaby punkt - każdy wątek łączy się z bazą i wykonuje mniejsze zapytanie SQL. Lepiej było by najpierw wykonać SQL a następnie wysyłkę podzielić na wątki. Z automatu odpadł by problem baz uwzględnionych w oryginale. Na tyle na ile skrypt był testowany działa prawidłowo.