如何传递PyHandles列表来运行,为每个句柄创建单独的线程

时间:2015-08-03 20:07:58

标签: python python-2.7

我需要列表中的每个目录句柄都在不同的线程中解决。 我的代码:

while len(handles_list) != 0:
    threading.Thread(target=handle_thread, args=handles_list,).start()
    handles_list.pop(0)

def handle_thread(handle):
    # do stuff with handle

这样写的它给出了一个错误,即def只接受一个参数 - 给出两个参数(或者更多,取决于列表的内容)。那么如何启动3个不同的线程给它们args handles_list [0],handles_list [1] ..等等。

1 个答案:

答案 0 :(得分:1)

线程对象期望目标函数具有该列表中包含的参数。您正在传递整个句柄列表,但目标函数需要一个句柄。

因此,您需要将单个句柄传递给您创建的每个线程。但是args参数需要是一个可迭代的,其长度是目标函数所期望的参数数量。所以你这样写:

for handle in handles_list:
    threading.Thread(target=handle_thread, args=[handle]).start()

或者如果你更喜欢使用元组而不是列表:

for handle in handles_list:
    threading.Thread(target=handle_thread, args=(handle,)).start()

本文简要介绍了传递给线程类的参数:Python Threading Arguments, Andrew Ippoliti