python多线程多进程

Python 的 concurrent 模块主要用于并发编程,尤其是任务调度和线程/进程池管理。它的核心是 concurrent.futures,提供了高级接口来管理线程和进程。

方法说明submit(fn, *args, **kwargs)异步提交一个任务,返回 Future 对象

map(fn, iterable)类似内置 map(),但是并发执行

shutdown(wait=True)关闭线程/进程池,wait=True 表示等待所有任务完成

result()获取 Future 的结果(阻塞直到完成)

done()判断任务是否完成

add_done_callback(fn)任务完成后自动调用某个函数

as_completed()按任务完成顺序返回结果

wait()等待所有任务完成,可以设置返回条件(如全部完成或任意一个完成)

  • wait(futures) 返回一个 namedtuple(done, not_done)
  • done 是一个集合,包含已经完成的 Future 对象
  • 所以你需要遍历 done,而不是直接遍历 wait(futures)

类型推荐使用示例

ThreadPoolExecutorI/O 密集型网络请求、文件读写

ProcessPoolExecutorCPU 密集型图像处理、科学计算

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor,as_completed,wait

def task(n):
    print(f"Processing {n} started")
    time.sleep(5)
    print(f"Processing {n} ended")
    return n * n

# with ThreadPoolExecutor(max_workers=3) as executor:
#     results = executor.map(task, [1, 2, 3, 4, 5])
#     print(list(results))

def compute(n):
    print("Process started ... ",n)
    time.sleep(5)
    print("Process ended ... ",n)
    return n * n
if __name__ == '__main__':

    with ProcessPoolExecutor(max_workers=3) as executor:
        futures = [executor.submit(compute, i) for i in range(5)]
        # for future in as_completed(futures):
        #     print(future.result())
        # for future in futures:
        #     print(future.result())

        done, not_done = wait(futures)
        for future in done:
            print(future.result())
   
 

 

posted @ 2025-10-24 13:16  我的腹肌不见了  阅读(4)  评论(0)    收藏  举报