0

スレッドを使用してディレクトリ内のファイルを処理しようとしています。スレッドが初めてなので、各スレッドがファイルを個別に処理することを期待していました。しかし、プログラムは 1 つのファイルが処理されるまで待機しています。プログラムは使用してスレッドを開始し、 t.start()それを待機します次の行にメッセージを出力して終了します。

print 'Started....' + fieldType +' proccessing'

そして、別のスレッドを開始するだけです

ここにpythonコードの一部があります

while(1):
for filename in os.listdir(inputFileDirectory):
    filePath = inputFileDirectory + '/' + filename
    f1 = open(filePath,'rb')
    try:
        reader  = csv.reader(f1)
        data = [l for l in reader]
        headerRow =  data[0]
        fieldType = headerRow[1]
        t = Thread(target=ProcessFile(fieldType,filePath,data))
        t.start()

        print 'Started....' + fieldType +' proccessing'

        threads.append(t)

        for thread in threads:
            thread.join()

        print "Complete."
    finally:
        f1.close()
4

4 に答える 4

4

スレッドを開始し、それをリストに入れ、すぐにそのリスト内のすべてのスレッドに参加するため、そのリストには常に 1 つのアクティブなスレッドを含めることができます。

移動する必要があります

    for thread in threads:
        thread.join()

あなたのforループの外。

于 2013-10-20T13:02:23.790 に答える
1

のコードを見せてくださいProcessFileThread問題は、コンストラクターに関数参照 ( target=ProcessFile) として渡すのではなく、それを呼び出してから、それが返すものを に渡すことだと思いますThread()

私が正しければ、代わりにあなたがすべきです

t = Thread(target=ProcessFile, args=(fieldType, filePath, data))
于 2013-10-20T13:09:29.693 に答える
0

私のコードには2つの問題がありました

1つの問題は、@mataが指摘するように、移動する必要があります

for thread in threads:
    thread.join()

forループの外

そして2番目の問題は@justinasが指摘したとおりでした

t = Thread(target=ProcessFile(fieldType,filePath,data))

する必要があります

t = Thread(target=ProcessFile, args=(fieldType, filePath, data))
于 2013-10-20T13:29:34.030 に答える
0

を使用しJoinているため、待機中です。

join([time]): join() は、スレッドが終了するのを待ちます。

同期と考えJoinてください。いつスレッドを同期したいですか?

たとえば、Nスレッドを処理したい場合、それらが完了したらソフトウェアを続行し、スレッドが完了した後に join を使用します。

于 2013-10-20T13:02:36.587 に答える