如何访问传递给 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)
)
我在 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)
)