在当今数据密集型和计算密集型任务日益增多的时代,Python并行算法成为提升程序性能的关键技术。无论是处理大量文件、进行科学计算,还是构建高性能Web服务,掌握多线程编程和多进程处理都能显著加快任务执行速度。本文将从零开始,用通俗易懂的方式带你入门Python中的并行编程。
单线程程序一次只能做一件事。如果你要下载100张图片,或者对100万个数字求和,顺序执行会非常慢。而通过并发计算,我们可以让多个任务“同时”运行,从而大幅缩短总耗时。
Python主要通过以下两种方式实现并行:
注意:由于Python的GIL(全局解释器锁),多线程在CPU密集型任务中并不能真正并行执行,因此这类任务推荐使用多进程。
假设我们要从多个URL获取网页内容,使用多线程可以显著减少总时间:
import threadingimport timeimport requestsdef fetch_url(url): print(f"开始下载: {url}") response = requests.get(url) print(f"完成下载: {url}, 状态码: {response.status_code}")urls = [ "https://httpbin.org/delay/1", "https://httpbin.org/delay/1", "https://httpbin.org/delay/1"]# 顺序执行start = time.time()for url in urls: fetch_url(url)print(f"顺序执行耗时: {time.time() - start:.2f}秒")# 多线程执行start = time.time()threads = []for url in urls: thread = threading.Thread(target=fetch_url, args=(url,)) threads.append(thread) thread.start()# 等待所有线程完成for thread in threads: thread.join()print(f"多线程执行耗时: {time.time() - start:.2f}秒") 下面是一个计算大量数字平方和的例子,使用多进程可以充分利用多核CPU:
import multiprocessingimport timedef square_sum(numbers): return sum(x * x for x in numbers)if __name__ == "__main__": # 准备数据 data = list(range(1000000)) chunk_size = len(data) // 4 chunks = [data[i:i + chunk_size] for i in range(0, len(data), chunk_size)] # 顺序执行 start = time.time() total_seq = sum(square_sum(chunk) for chunk in chunks) seq_time = time.time() - start # 多进程执行 start = time.time() with multiprocessing.Pool(processes=4) as pool: results = pool.map(square_sum, chunks) total_par = sum(results) par_time = time.time() - start print(f"顺序结果: {total_seq}, 耗时: {seq_time:.2f}秒") print(f"并行结果: {total_par}, 耗时: {par_time:.2f}秒") print(f"加速比: {seq_time / par_time:.2f}x") - 如果你的任务涉及大量等待(如下载、数据库查询),使用多线程编程即可。
- 如果你的任务需要大量CPU计算(如数据分析、机器学习训练),请选择多进程处理。
此外,Python 3.2+ 还提供了 concurrent.futures 模块,它封装了线程池和进程池,使用起来更简洁:
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor# 多线程with ThreadPoolExecutor(max_workers=4) as executor: results = executor.map(fetch_url, urls)# 多进程with ProcessPoolExecutor(max_workers=4) as executor: results = executor.map(square_sum, chunks) 通过本文,你已经掌握了Python中实现并发计算的基本方法。记住:Python并行算法不是万能的,但合理使用多线程和多进程,能让你的程序效率成倍提升。动手试试吧!
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124868.html