Zum Inhalt springen

PERL: Probleme mit mehreren Threads


Empfohlene Beiträge

Ich habe hier ein Problem mit Perl und Threads.

Es müssen ca. 2500 Dateien, verteilt auf ca. 140 Ordner, aus Subversion gezogen werden.

Um Zeit zu sparen wollte ich dafür 2 oder 3 Threads parallel laufen lassen.

Dazu setze ich folgenden Aufruf ab:


$queue1->enqueue(@LibList1); # Queue aufbauen

$queue2->enqueue(@LibList2); # Queue aufbauen


$thread = new threads(\&worker, $queue1);

$thread = new threads(\&worker, $queue2);


foreach $thr (threads->list)

{

    if ($thr->tid && !threads::equal($thr, threads->self))

    {

        $thr->join;

    } 

}

In $queue1 und $queue2 stehen die zu exportierenden Verzeichnisse. &worker ist die Arbeitsprozedur, da passiert das Kopieren:

sub worker

{

	# Hier wird aus den Übergaben gelesen, habe ich aber weggelassen!

	while($queue->pending > 0)

	{

		my $verz = $queue->dequeue;

		`svn export --force $verz`;

	}

	return 0;

}

Der Export funktioniert auch erst mal, ist auch schneller.

Aber sobald ein Thread beendet ist, bekomme ich beim $thr->join Fehlermeldungen:

Attempt to free unreferenced scalar: SV 0x2595b94, Perl interpreter: 0x242205c line 148.

Attempt to free unreferenced scalar: SV 0x2c989e4, Perl interpreter: 0x242205c during global destruction.

Attempt to free unreferenced scalar: SV 0x2c989c0, Perl interpreter: 0x242205c during global destruction.

Attempt to free unreferenced scalar: SV 0x2c9899c, Perl interpreter: 0x242205c during global destruction.

Und der letzte Thread kommt gar nicht mehr zurück, obwohl der Exportvorgang durch ist. Perl wartet sich dann einen Wolf.

Dabei ist egal wie viele Threads ich starte, der letzte bleibt immer auf der Strecke.

Habe ich irgendwo einen Denkfehler drin?

Oder sind diese Systemaufrufe mit `` nicht Thread-geeignet?

Gibt es Alternativen, oder besser beerdigen und weiter alles schön nacheinander exportieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...