Board logo

标题: [讨论]如何灵活的实现多进程处理? [打印本页]

作者: 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
谢谢,然我试试看效果。