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())
浙公网安备 33010602011771号