0

我正在尝试使用线程处理目录中的文件。作为线程的新手,我希望每个线程分别处理一个文件。但是程序正在等待处理一个文件。程序使用 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

您启动一个线程,然后将其放入一个列表并立即加入该列表中的所有线程,因此您始终可以在该列表中拥有一个活动线程。

你需要搬家

    for thread in threads:
        thread.join()

在你的 for 循环之外。

于 2013-10-20T13:02:23.790 回答
1

向我们展示ProcessFile. 我认为问题在于你没有将它Thread作为函数引用(target=ProcessFile)传递给构造函数,而是调用它,然后将它返回的任何内容传递给Thread().

如果我是对的,那么你应该这样做

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

我的一段代码有 2 个问题

@mata 指出的一个问题是我需要搬家

for thread in threads:
    thread.join()

在 for 循环之外

第二个问题正如@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 回答