Py学习  »  Python

如何在Python的concurrent.futures中并发调用多个单独的函数并获得有序的结果?

Tom • 5 年前 • 1549 次点击  

假设我有两个独立的函数。我想同时调用它们,使用python的 concurrent.futures.ThreadPoolExecutor . 有没有办法叫他们用 Executor 并确保按提交顺序返回?

我知道这是可能的 Executor.map ,但我希望并行化两个单独的函数,而不是一个具有可交互输入的函数。

我有下面的示例代码,但不能保证 fn_a 将首先返回(通过设计 wait 功能)。

from concurrent.futures import ThreadPoolExecutor, wait
import time


def fn_a():
    t_sleep = 0.5
    print("fn_a: Wait {} seconds".format(t_sleep))
    time.sleep(t_sleep)
    ret = t_sleep * 5  # Do unique work
    return "fn_a: return {}".format(ret)


def fn_b():
    t_sleep = 1.0
    print("fn_b: Wait {} seconds".format(t_sleep))
    time.sleep(t_sleep)
    ret = t_sleep * 10  # Do unique work
    return "fn_b: return {}".format(ret)


if __name__ == "__main__":
    with ThreadPoolExecutor() as executor:
        futures = []
        futures.append(executor.submit(fn_a))
        futures.append(executor.submit(fn_b))
        complete_futures, incomplete_futures = wait(futures)
        for f in complete_futures:
            print(f.result())

我也很想知道有没有办法 joblib

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49333
 
1549 次点击  
文章 [ 1 ]  |  最新文章 5 年前