Mehrere Downloads gleichzeitig

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sebert
Beiträge: 19
Registriert: 21.03.2014 19:12

Mehrere Downloads gleichzeitig

Beitrag von Sebert »

Hallo zusammen,

wollte erfragen, ob jemandem von euch eine geschickte Lösung meines Problemes einfällt.
Schreibe einen Podcatcher mit integrierter History etc.

Das Ganze erfolgt in Schritten:

1. Feedadresse wird aus Configdatei gelesen.
2. Die Einzelnen Podcastfolgen/enclosures aus dem Feed werden
a) Mit einer History abgeglichen
b) Falls noch nicht vorhanden werden alle Daten (url, Zielordner, Datum, Titel, Description etc..)
in eine strukturierte Liste gespeichert.
3. Wenn alle Feeds abgearbeitet wurden, dann wird die Liste abgearbeitet.

Code: Alles auswählen

Structure INFOS
  Titel.s
  Date.s
  Album.s
  Artist.s
  Genre.s
  Description.s
  Entrypath.s
  Targetpath.s
  FeedURL.s
EndStructure  

Global NewList Tags.INFOS()

[..]
ForEach Tags()
  
 If SimpleHTTP_GET_File(Tags()\Entrypath, Tags()\Targetpath, #False)
    WriteTags() ; Schreibt die Tags in die heruntergeladenen Dateien, entnimmt die Daten dem aktuellen Element der Liste Tags()
    historyentry(Tags()\Entrypath ,Tags()\FeedURL)   ;Schreibt Datei in die XML History
 Else
   AddElement(Fails()) ;Liste in der die gescheiterten Downloads abgespeichert werden.
   
;Falls Dateifragment heruntergeladen wurde, aber nicht vollständig, wird fragment gelöscht 
  If FileSize(Tags()\Targetpath) = -1      
  Else
    DeleteFile(Tags()\Targetpath)
  EndIf  
 EndIf
           
Next  
Jetzt würde ich gerne aber mehrere Dateien gleichzeitig herunterladen, um die Bandbreite optimal auszunutzen.
Würde sich das bewerkstelligen lassen? Habe mit Threads bisher nur im Zusammenhang mit der GUI gearbeitet.

Meine Probleme:
- Wenn mehrere Datein gleichzeitig heruntergeladen werden, klappt das ja mit dem aktuellen Element aus der List nicht mehr. Also über eine Schleife in zBsp. 2er Schritten?
- Wie würde man verhindern, dass bei mehrfacher Ausführung der "historyentry" Prozedur es keine Probleme mit dem Zugriff auf die History (ist eine XML Datei) kommt?


Wäre für Denkanstösse dankbar !

Grüße

Sebastian
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Mehrere Downloads gleichzeitig

Beitrag von NicTheQuick »

Sebert hat geschrieben:Meine Probleme:
- Wenn mehrere Datein gleichzeitig heruntergeladen werden, klappt das ja mit dem aktuellen Element aus der List nicht mehr. Also über eine Schleife in zBsp. 2er Schritten?
Du nutzt eine Warteschlangenstruktur wie ich sie zum Beispiel hier programmiert habe: [PB] HowTo: ConcurrentQueue
- Wie würde man verhindern, dass bei mehrfacher Ausführung der "historyentry" Prozedur es keine Probleme mit dem Zugriff auf die History (ist eine XML Datei) kommt?
Mit Locks, also einem Mutex.[/quote]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Mehrere Downloads gleichzeitig

Beitrag von STARGÅTE »

Könntest du bitte eine Quelle zu "SimpleHTTP_GET_File()" geben?
Ist die Funktion Thread-Safe ?
Sebert hat geschrieben:- Wenn mehrere Datein gleichzeitig heruntergeladen werden, klappt das ja mit dem aktuellen Element aus der List nicht mehr. Also über eine Schleife in zBsp. 2er Schritten?
- Wie würde man verhindern, dass bei mehrfacher Ausführung der "historyentry" Prozedur es keine Probleme mit dem Zugriff auf die History (ist eine XML Datei) kommt?
Mit Mutexes kannst du Regionen in Thread gegeneinander schützen.
So kannst du die Auswahl eines Elements mit Mutex schützen und dann aus der Bearbeitungs-Liste löschen.
Genauso kannst du mit einem Mutex das XML schützen, sodass immer nur ein Thread drauf zugreifen kann.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Sebert
Beiträge: 19
Registriert: 21.03.2014 19:12

Re: Mehrere Downloads gleichzeitig

Beitrag von Sebert »

@NicTheQuick

Danke für die Antwort. Werde mir das mal anschauen.

@STARGÅTE
Habe das von hier:
http://purebasic.fr/english/viewtopic.p ... 63ec9852de
Hatte im Hinterkopf gelesen zu haben, dass sowas mit den Funktionen der Library geht. Finde
das aber im Momnet nict mehr.

Schonmal danke für die Antworten.

Grüße

Sebastian

__________________________________________________
Domain angepasst
21.04.2014
RSBasic
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Mehrere Downloads gleichzeitig

Beitrag von HeX0R »

Soll das Win-Only werden?
Dann wäre das hier evtl. was für Dich, damit kannst Du recht einfach mehrere Downloads im Hintergrund durchführen.
Benutzeravatar
Sebert
Beiträge: 19
Registriert: 21.03.2014 19:12

Re: Mehrere Downloads gleichzeitig

Beitrag von Sebert »

Hi HeXOR,

danke für den link.
Werde mir das mal anschauen, benütze mittlerweile Wget für die Downloads.
Alle anderen Methoden hatten dann doch ziemlich Probleme mit manchen Podcasts, da die
Links dort teilweise durch 3-4 redirects gejagt werden.

Werde dein Include mal testen. Wenn das funzt wäre das natürlich super,
interne/integrierte Lösungen sind mir da lieber.

Grüße

Sebastian
Antworten