Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Parallele Verarbeitung von Batchjobs

Frage Entwicklung Batch & Shell

Mitglied: dedalus2011

dedalus2011 (Level 1) - Jetzt verbinden

06.04.2012, aktualisiert 22:50 Uhr, 2460 Aufrufe, 8 Kommentare

Hallo,

es müssen mehrere Textdateien gleichzeitig verarbeitet werden, d.h. die Batchjobs parallelisiert werden. Habe mir folgendes überlegt:

01.
set "worker=E:\worker.bat" 
02.
 
03.
ECHO Erzeugen %2 Kopien von %1 
04.
 
05.
FOR  /L %%i IN (1, 1, %2) DO ( 
06.
    ECHO Erzeuge thread %%i 
07.
 START "worker%%i" /Min %1 %%i %2  
08.
)
Ein einzelner Batchjob/Thread wäre z.B.:

01.
  
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
set "Datei=D:\MyFile%1" 
06.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "D:\MyFile%1.txt"') do set "Zeile=%%j" && echo %%i 
07.
pause 
08.
 
Dafür müssen aber die Dateien fortlaufend nummeriert werden: z.b. MyFile1, MyFile2 usw. Gibt's da eine andere Möglichkeit die Threads parallel laufen zu lassen ohne die Dateien fortlaufend nummerieren zu müssen?

Danke für Eure Ideen

Grüße
dedalus2011
Mitglied: mathe172
06.04.2012 um 23:09 Uhr
Hallo,

eine Möglichkeit, jeder Datei eine eindeutige Nummer zuzuordnen, wäre zum Beispiel, eine Datei mit den Dateinamen zu erstellen (per "dir /b" o.ä.)
Dann kann jeder Datei mit "findstr /n" eine Nummer gegeben werden.

Hoffe ich konnte es verständlich machen. (Wenn nicht, nachfragen)

MfG,
Mathe172
Bitte warten ..
Mitglied: 106009
06.04.2012 um 23:53 Uhr
Hi,

Gibt's da eine andere Möglichkeit die Threads parallel laufen zu lassen ohne die Dateien fortlaufend nummerieren zu müssen?

Klar doch. Man wählt einfach unterschiedliche Dateinamen für die zu bearbeitenden Jobs..
Eine andere Möglichkeit wäre, ein Betriebssystem zu benutzen, das hellsehen kann. Kennst du eins? Ich nicht.


@mathe172
zum Beispiel, eine Datei mit den Dateinamen zu erstellen (per "dir /b" o.ä.)
Seit wann erstellt man per "dir /b" Dateien?

Gruß
Bitte warten ..
Mitglied: bastla
07.04.2012 um 00:21 Uhr
@106009
Seit wann erstellt man per "dir /b" Dateien?
Seit Erfindung der Ausgabeumleitung ...

Grüße
bastla
Bitte warten ..
Mitglied: 106009
07.04.2012 um 00:42 Uhr
@bastla
Zitat von bastla:
Seit Erfindung der Ausgabeumleitung ...

Das geht aber nicht mit "o.ä." sondern mit "> Liste.txt". :-P
Wenn man die (nach meiner Ansicht) wirren Vorstellungen aus dem Beitrag liest, könnte man unter Dateinamen erstellen auch was Anderes verstehen.

Gruß
Bitte warten ..
Mitglied: bastla
07.04.2012 um 00:48 Uhr
@106009
könnte man unter Dateinamen erstellen auch was Anderes verstehen.
Da muss ich mathe172 aber etwas in Schutz nehmen - er hat ja ausdrücklilch "eine Datei mit den Dateinamen" vorgeschlagen ...

Grüße
bastla
Bitte warten ..
Mitglied: 106009
07.04.2012 um 00:55 Uhr
Kannst du ja ruhig. Ich bleibe aber trotzdem dabei, dass die Zeile im Zusammenhang mit dem "Beitrag" missverständlich ist. :-P
Bitte warten ..
Mitglied: mathe172
07.04.2012 um 16:03 Uhr
@TE und ollidolli:
Man könnte per
01.
>Dateien.txt dir /b
eine Datei mit den Dateinamen aller zu bearbeitenden Dateien machen (gegebenenfalls einen Filter wie z.B. *.txt einbauen)
Die Anzahl der Dateien liesse sich dann in der Hauptdatei mit
01.
for /f "delims=:" %%A in ('finstr /n "^" "Dateien.txt"') do set "Anzahl=%%A"
herausfinden.

In der Verarbeitungsdatei kann dann mit
01.
for /f "tokens=1* delims=:" %%A in ('finstr /n "^" "Dateien.txt"') do if "%%A"=="%1" set "Datei=%%B"
[Edit: die richtige Datei gefunden werden.]
Ich hoffe es ist eindeutiger so.

MfG,
Mathe172
Bitte warten ..
Mitglied: dedalus2011
08.04.2012 um 17:09 Uhr
hallo,

es klappt bei mir jetzt dass die einzelne Threads parallel verarbeitet werden, ohne die DAteien explizit nummerieren zu müssen. Da aber das Hauptprogramm mehr cpu braucht, wollte ich die Anzahl der parallel zu verarbeitenden Dateien auf eine gewisse Anzahl beschränken (z.B. im Code wäre dies durch "nofiles=3" festgelegt). Mein Problem wäre dass das Hauptprogramm (konkreter gesagt die Zeile 19 im Code) sich in der Unterroutine :sub nicht ausführen lässt ("The system cannot find the batch file specified").

Freue mich über jeden Hinweis

Grüße
dedalus2011

01.
setlocal enabledelayedexpansion 
02.
 
03.
 
04.
set "Quelle=%Ordner_PROT%" 
05.
 
06.
REM Count number of files 
07.
 
08.
for /f %%i in ('dir /b /a-d %Quelle% ') do set /a count+=1 && set !count!=count 
09.
 
10.
if %count% gtr 3 (set /a zaehler=%count% && set nofiles=3 && set /a index=!nofiles! && set first=1 && call :sub) else call :sub2 
11.
 
12.
goto :end 
13.
 
14.
 
15.
:sub 
16.
 
17.
REM Run only %nofiles% at a time 
18.
 
19.
call E:\spawnmany.bat E:\worker.bat %index% %Quelle% %first% 
20.
 
21.
 
22.
set /a zaehler=%zaehler% - %nofiles%  
23.
set /a first=%first% + %nofiles% 
24.
set /a variable = %count% - %index% 
25.
 
26.
if %variable% gtr %nofiles% (set /a index= %index% + %nofiles%) else set /a index=%index% + %zaehler% 
27.
 
28.
if %Zaehler% gtr 0 goto :sub 
29.
 
30.
 
31.
goto :eof 
32.
 
33.
:sub2 
34.
echo EXCEUTE NORMAL CODE 
35.
 
36.
goto :eof 
37.
 
38.
:end 
39.
 
40.
 
Die spawnmany.bat Datei:

01.
 
02.
FOR  /L %%i IN (%4, 1, %2) DO ( 
03.
    ECHO Spawning thread %%i 
04.
 START "Worker%%i" /Min %1  %%i %2  %3 
05.
06.
 
07.
 
08.
echo Please wait until all the threads are completed!% 
09.
 
10.
pause 
11.
 

Hat sich erledigt..hatte den "call" davor vergessen. Es klappt jetzt. Danke an alle für Eure Hilfe

Grüße
dedalus2011
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
gelöst Verarbeitung Gruppenrichtinie (3)

Frage von Philipp711 zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...