Цитата Megatron13:
Обработка 1ого урл в этой программе для современных машин дело плевое, поэтому я захотел блекджека и шлюх, то есть обрабатывать несколько урлов одновременно, хотя это и необязательно, но желательно. »
|
Вам нужны два скрипта.
ThreadBalancer.cmd - тут указывается количество параллельно запущенных потоков, входной файл с url делится поровну между ними
Threads - потоки, Data - файл с URL-ками
Код:
@Echo Off
SetLocal EnableDelayedExpansion
:: Настройки
Set Data=data.txt
Set Threads=3
:: Подсчет общего числа строк
Set sCount=0&For /F "usebackq" %%A In ("%Data%") Do Set /A sCount+=1
:: Делим данные на части по количеству потоков
Set /A SingleThread=sCount/Threads
:: Удаляем предыдущие временные данные
Del "%Temp%\$thread*.txt" 2>nul
:: Проверяем, есть ли остаток
Set /A AllThreads=SingleThread*Threads
If %AllThreads%==%sCount% (
rem Без остатка, просто разделяем данные на части по числу потоков
Set cString=0&Set ThreadNum=1&Set /A Reset=SingleThread+1
For /F "useback delims=" %%A In ("%Data%") Do (
Set /A cString+=1
If !cString!==!Reset! (Set /A ThreadNum+=1&Set cString=1)
Echo %%A>>"%Temp%\$thread!ThreadNum!.txt"
)
) Else (
rem Есть остаток, добавляем излишки к последнему потоку
Set cString=0&Set ThreadNum=1&Set /A Reset=SingleThread+1
For /F "useback delims=" %%A In ("%Data%") Do (
Set /A cString+=1
If !cString!==!Reset! (
If Not !ThreadNum! GEQ %Threads% (Set /A ThreadNum+=1)
Set cString=1
)
Echo %%A>>"%Temp%\$thread!ThreadNum!.txt"
)
)
:: Запускаем потоки, выполняющие последовательно каждый свою часть работы
:: Запуск производится в том же окне, чтобы не спамить окнами при большом
:: количество потоков
For /L %%N In (1,1,%Threads%) Do (
Start /B Thread.cmd "%Temp%\$thread%%N.txt"
)
Pause>nul
Thread.cmd
А здесь уже собственно, запускается сама программа, которой поочередно скармливаются URL из диапазона, отданного потоку.
Код:
@Echo Off
:: Последовательное выполнение из выделенной потоку очереди
For /F "usebackq delims=" %%A In ("%~1") Do (
something.exe %%A
)
Exit
С вызовом программы сами уже определяйтесь, куда что и как перенаправлять.