Python可以利用多核CPU进行并行计算,主要有以下几种方式:
多线程
使用Python标准库`threading`模块创建和管理线程。
注意:由于全局解释器锁(GIL)的存在,Python的多线程并不能充分利用多核CPU的优势,因为线程在单核上执行。
多进程
使用Python标准库`multiprocessing`模块创建多个进程,每个进程在单独的CPU核心上运行。
`multiprocessing.Process`类可以用来创建新进程并执行任务。
`multiprocessing.Pool`类可以创建一个进程池,将任务分发到多个进程执行。
`concurrent.futures.ProcessPoolExecutor`类提供了一个高级接口,用于管理进程池。
使用第三方框架
例如Twisted或Ampoule框架,它们提供了事件驱动的并发模型,可以用于构建网络服务或其他并行任务。
结合多进程和多线程
在某些情况下,可以将多进程和多线程结合使用,以更好地利用多核CPU。
下面是一个使用`multiprocessing`模块的简单示例,展示如何并行执行任务:

import multiprocessingimport timedef cpu_bound_task():模拟CPU密集型任务count = 0for i in range():count += 1return countdef preprocess():模拟预处理return time.time()def postprocess():模拟后处理return time.time()方式一:单进程单线程执行start_time = preprocess()cpu_bound_task()cpu_bound_task()cpu_bound_task()end_time = postprocess()print('Latency (ms)', (end_time - start_time) * 1000)方式二:单进程多线程执行注意:由于GIL,这种方式不会充分利用多核CPUdef server():start_time = preprocess()threads = []for _ in range(3):thread = threading.Thread(target=cpu_bound_task)threads.append(thread)thread.start()for thread in threads:thread.join()end_time = postprocess()print('Latency (ms)', (end_time - start_time) * 1000)方式三:多进程执行使用multiprocessing模块创建多个进程if __name__ == '__main__':start_time = preprocess()processes = []for _ in range(3):process = multiprocessing.Process(target=cpu_bound_task)processes.append(process)process.start()for process in processes:process.join()end_time = postprocess()print('Latency (ms)', (end_time - start_time) * 1000)
在多进程执行示例中,我们创建了三个进程,每个进程运行`cpu_bound_task`函数,这样就可以充分利用多核CPU的优势。
请根据您的具体需求选择合适的并发策略
