Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...