如何访问传递给 Python 线程的函数参数?

How can I access function args passed to a Python thread?

我在 python.

中使用以下代码(为保密起见进行了简化)到 运行 个多线程
pool = ThreadPoolExecutor(max_workers=3)
for result in pool.map(my_function, [1, 2, 3], ['a', 'b', 'c']):
    # do something with the result depending on which arguments the thread has used

有没有一种方法可以访问每个线程用来获取 result 的参数,而无需 my_function return 这些参数作为 result 的一部分?

如果不出意外,您可以枚举结果并将结果与​​原始输入匹配。

arg1s = [1, 2, 3]
arg2s = ['a', 'b', 'c']

for i, result in enumerate(pool.map(my_function, arg1s, arg2s)):
    # If i == 1, then result == my_function(1, 'a')
    # If i == 2, then result == my_function(2, 'b')
    # etc
    ...

ProcessPoolExecutor 的文档提供了一个 example of map,这意味着返回结果的顺序与使用参数的顺序相同。我假设 ThreadPoolExecutor 也是如此,因为 map 是从 Executor 继承的。事实上,您可以编写一个更笨重的版本来更贴近该示例:

for arg1, arg2, result in zip(arg1s, arg2s, pool.map(lambda x: my_function(*x), arg1s, arg2s)):
    # result == my_function(arg1, arg2)

)