Thread thread starten wenn anderer thread schläft (3 answers)
Opened by Perlstarter at 2016-02-11 20:11

Gast Perlstarter
 2016-02-11 20:11
#183837 #183837
Guten Abend,

ich versuche mich aktuell an die Arbeit mit perl threads zu gewöhnen.
Dabei programmiere ich ein tool welches zwei unabhängige subs hat, es soll eine art scrapper werden. Dabei habe ich massive Probleme diese zwei subs zu starten, damit sie mithilfe von dbi auf einer sql Datenbank arbeiten können.

sub scrapper soll sich Daten aus der Datenbank holen und diese verarbeiten und neue Daten in die Datenbank hinzufügen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub scrapper {
while(1) {

->Datenbank Zugriff über sub get_data()<-
->Scrappen von Daten<-
->Daten hinzufügen über add_data()<-

->Sleep(1000)<-
}
}


Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub work {
while(1) {

->Datenbank Zugriff über sub get_scrapped_data()<-
->Arbeiten mit den Daten<-
->Datenbank Eintrag aktualisieren mit dem gearbeitet wurde über sub update_data()<-

sleep(int(rand(5000)) + 3500);
}
}


Ich möchte die subs parallel in einer infinite loop laufen lassen. Und da ist auch schon das problem wie lasse ich threads solange aktiv bis ich sie unterbreche?

Außerdem gibt es ein problem mit dbi. Der DBI Handle kann nicht zwischen zwei threads geteilt werden. Ich bekomme diese Fehlermeldung

Quote
Thread 1 terminated abnormally: DBD::mysql::db prepare failed: handle 2 is owned by thread 619fb8 not current thread 33ec118 (handles can't be shared between threads and your driver may need a CLONE m
ethod added) at scrap.pl line 175.


Ich habe bereits einiges gelesen zu dem Thema. Z.B. etwas von DBIx::Threaded oder Threads::Queue aber leider fehlt mir da das Verständnis für die threads Thematik.

Vil hat jemand eine Idee wie ich die zwei subs zum laufen bringe.

Liebe Grüße Perlstarter
Last edited: 2016-02-11 20:15:23 +0100 (CET)

View full thread thread starten wenn anderer thread schläft