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號