如何查看concurrent.futures.ThreadPoolExecutor线程执行结果?

How to check concurrent.futures.ThreadPoolExecutor thread execution results?

我正在尝试检查这段代码中的期货结果:

with concurrent.futures.ThreadPoolExecutor(max_workers=number_of_tests) as executor:
   result_list = executor.map(run_one_test_thread,
        ((i) for i in range(0, number_of_tests)))

   print("result_list: ", result_list)

   for result in result_list:
       print("Result ==========================>", result)

但是打印结果的代码好像打不通,什么也打印不出来。 打印 result_list 给出:

result_list: <generator object Executor.map..result_iterator at 0x7fa968b4a888>

注意:我需要使用executor.map而不是executor.submit因为我需要所有线程并行运行(如果有对未来结果的影响。)

除了@MisterMiyagi 的评论,我可以提出以下建议:

with concurrent.futures.ThreadPoolExecutor(max_workers=number_of_tests) as executor:
    result_list = {executor.submit(run_one_test_thread, (i)) for i in range(0, number_of_tests)}
    for result in concurrent.futures.as_completed(result_list):
        print(result.result())

它还将运行 并行处理所有内容。结果将以随机顺序出现,因为先完成的人会被打印出来。

如果您必须使用自己的示例,请按以下步骤操作:

with concurrent.futures.ThreadPoolExecutor(max_workers=number_of_tests) as executor:
   result_list = executor.map(run_one_test_thread,
        ((i) for i in range(0, number_of_tests)))

   print("result_list: ", result_list)

   for result in result_list:
       print("Result ==========================>", str(result))

结果:

result_list:  <generator object Executor.map.<locals>.result_iterator at 0x000001D5C03F8D60>
Result ==========================> 0
Result ==========================> 1
Result ==========================> 2
Result ==========================> 3
Result ==========================> 4
Result ==========================> 5
Result ==========================> 6
Result ==========================> 7
Result ==========================> 8
Result ==========================> 9

如果要打印列表:

print("result_list: ", list(result_list))

结果:

result_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]