1

私はantを使用して、ディレクトリ内のすべてのファイルをフェッチし、5つのファイルのみを並列に実行し、次の55を再度実行します。すでに実行されたファイルは再度実行されるべきではありません。

<target name="ParallelTest" description="Checking the parallelTest">
        <for param="file" >
            <path> 
                <fileset dir="C:/RCBuild3/ofs/bin/prd1">
                        <include name="*.xml"/> 
                </fileset>
            </path>
            <sequential>
                <antcall target="parallelexecutoin">
                    <param name="productfile" value="@{file}"/>
                </antcall>
            </sequential>
        </for> 

    </target>
    <target name="parallelexecutoin">
        <exec dir="C:/RCBuild3/ofs/bin/" executable="cmd">
            <arg value="/c"/>
            <arg value="productupload.bat"/>
            <arg value="-fileName"/>
            <arg value="${productfile}"/>
        </exec>
    </target>    

上記のコードは順番に実行されます。

4

1 に答える 1

2

最初のコード:

<fileset dir="C:/RCBuild3/ofs/bin/prd1" id="src.files">
    <include name="*.xml"/> 
</fileset>

<pathconvert pathsep="," property="file.list" refid="src.files"/>

<for list="${file.list}" delimiter="," param="file" parallel="true" threadCount="5">
    <sequential>
        <antcall target="parallelexecutoin">
            <param name="productfile" value="@{file}"/>
        </antcall>
    </sequential>
</for>

説明:

まず、fileset処理する必要のあるすべてのファイルを準備します。

次に、を使用pathconvertしてファイルセットを次のようなプロパティ「file.list」に変換しますfilename1.xml,filename2.xml,filename3.xml

forタスクのJavaコード(Antファイルの背後に隠れています)は、コンマを使用して「file.list」をに分割しList、をループしますList。の各要素に対してList、ループ本体(sequential部分)が実行されます。

parallelfor複数のスレッドでループ本体を実行するようにタスクに指示しますthreadcount。これは、同時に実行できるスレッドの最大数です。

したがって、parallel = truethreadcount = 5は、説明したとおりに機能します。一度に5ファイルです。

于 2013-03-27T07:11:35.833 に答える