python-并发编程-future


在Python中,并发编程可以通过使用concurrent.futures模块来实现。concurrent.futures提供了Future类,它是一种表示异步计算结果的对象。通过使用Future对象,你可以以异步方式执行函数,并在将来获取其结果。

以下是使用concurrent.futures.Future的基本概念:

  1. 异步执行任务: 使用concurrent.futures.ThreadPoolExecutorconcurrent.futures.ProcessPoolExecutor创建一个线程池或进程池,然后使用submit方法提交任务。该方法返回一个concurrent.futures.Future对象,表示任务的未来结果。

```python from concurrent.futures import ThreadPoolExecutor

def my_function(param): # some computation return result

with ThreadPoolExecutor() as executor: future_result = executor.submit(my_function, arg) ```

  1. 获取结果: 通过Future对象的result方法获取异步任务的结果。这将阻塞直到任务完成。

python result = future_result.result()

  1. 处理异常: 你可以使用concurrent.futures.TimeoutError来处理任务超时异常。此外,可以使用concurrent.futures.as_completed来迭代已完成的Future对象。

```python from concurrent.futures import as_completed, TimeoutError

with ThreadPoolExecutor() as executor: future_to_result = {executor.submit(my_function, arg): arg for arg in args}

   for future in as_completed(future_to_result):
       try:
           result = future.result(timeout=1)
       except TimeoutError:
           print("Task timed out")
       else:
           print("Task completed with result:", result)

```

  1. 取消任务: 通过Future对象的cancel方法取消尚未开始的任务。已经开始执行的任务无法取消。

python future_result.cancel()

concurrent.futures.Future是一种在Python并发编程中处理异步任务的强大工具,可用于提高程序执行效率。请注意,Python中还有其他并发编程的选项,如asyncio模块,适用于异步事件循环。