【问题标题】:How to make a Python concurrent Future that signals when a list of Futures has completed?如何使 Python 并发 Future 发出 Future 列表完成时发出的信号?
【发布时间】:2021-03-28 00:29:16
【问题描述】:

我有一个函数可以向ThreadPoolExecutor 提交多个任务并返回每个提交创建的期货列表:

def submit_tasks() -> [Future]:
    futures = []

    for i in range(10):
        future = executor.submit(Task())
        futures.append(future)

    return futures

def submit() -> Future:
    futures = submit_tasks()
    
    # I would like this function to return a single Future that clients can use to check
    # whether all futures in the list have completed. How to do that?

我使用的是 Python 3.8

我希望这个函数返回一个 Future,客户可以使用它来检查列表中的所有 Future 是否都已完成。该怎么做?

【问题讨论】:

  • 在每个future上使用add_done_callback,并在列表中的所有future都完成后完成单个future?
  • 这就是我的想法,但我如何创建一个可以“手动”完成的单一未来?这就是我遇到问题的部分。如果您可以将此作为答案发布,我可以接受。谢谢!
  • Future.set_result?
  • 我不认识,这就是我问的原因哈哈
  • 您是否尝试过使用Future.set_result

标签: python python-3.x concurrency concurrent.futures


【解决方案1】:

使用concurrent.futures.waithttps://docs.python.org/3/library/concurrent.futures.html#module-functions

from concurrent.futures import Future, wait

...

def submit() -> Future:
    return wait(submit_tasks())

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多