标题: [讨论]如何灵活的实现多进程处理?
[打印本页]
作者: honghunter
时间: 2007-12-15 20:07
标题: [讨论]如何灵活的实现多进程处理?
下面的批处理是在本版看到的一个批处理文件的基础上修改的,
目的是用在需要下载多个文件的时候,能充分利用资源,使用多个进程来速度总的下载时间。
希望能通过类似这样的调用:
CALL %PUB_BATCH%\multi-process.bat %CACHE_DIR%\url.txt %BATCH_WS%\sub_get_book.bat 7
来达到这样的目的:
1,将url.txt中每行的url都下载下来
2,最多同事运行7个CMD进程
目前的问题:
在for执行到第8行的时候,如果前面7个都没有执行完(就是当前还有7个CMD进程),就会丢失对第8行的处理。
补充:sub_get_book.bat运行的时间的长短不一定,可能几秒结束,也可能要几分钟才能结束。
if "%3"=="" goto show_help
@ECHO OFF & SETLOCAL ENABLEDELAYEDEXPANSION
SET TMP_CACHE_FILE=%1
SET /a MaxCMD=%3
SET /a LineNo=1
SET SUB_AUTO_EXIT=1
for /f "delims=#" %%a in (%TMP_CACHE_FILE%) do (
echo get line=%%a
for /f "delims=:" %%i in ('tasklist /fi "IMAGENAME eq cmd.exe" /nh ^|findstr /n .*') do set "count=%%i"
set /a count=!count!-2
if !count! lss !MaxCMD! (
start "!LineNo!" /min %2 %%a
set /a LineNo=LineNo+1
sleep 3s
)
@REM echo sleep 3s in main batch.
sleep 3s
)
goto :eof
:show_help
echo 缺少参数!
echo TMP_CACHE_FILE=%TMP_CACHE_FILE%
echo eg.: call multi-process.bat 需要循环处理的文件 被调用处理文件的子批处理文件 同时多少个CMD一起处理
goto :eof
需要处理的url.txt文件内容格式:
tmp0 "http://vip.book.sina.com.cn/book/book_read.php?book=8743"
tmp1 "http://vip.book.sina.com.cn/book/book_read.php?book=8161"
tmp2 "http://vip.book.sina.com.cn/book/book_read.php?book=26705"
tmp3 "http://vip.book.sina.com.cn/book/book_read.php?book=5667"
tmp4 "http://vip.book.sina.com.cn/book/book_read.php?book=4973"
tmp5 "http://vip.book.sina.com.cn/book/book_read.php?book=15050"
tmp6 "http://vip.book.sina.com.cn/book/book_read.php?book=7700"
作者: gahoo
时间: 2007-12-16 02:26
献丑了
REM Nproc.cmd
REM Name为进程名称,Max为最大进程数,Interval为检测间隔时间
@echo off
SET Name=%1
SET Max=%2
SET Interval=%3
cls
for /f %%i in ('tasklist /fi "imagename eq %Name%" /nh ^|find "%Name%" /c') do echo 当前进程数为:%%i && if %%i GEQ %Max% ping -n %Interval% 127.1>nul && call Nproc %Name% %Max% %Interval%
[
Last edited by gahoo on 2007-12-16 at 02:27 AM ]
作者: honghunter
时间: 2007-12-16 19:32
谢谢,然我试试看效果。