要在Python中并行化代码片段,可以使用多种方法,具体取决于代码的性质和需求。以下是一些常见的并行化方法和示例代码:
concurrent.futures
模块concurrent.futures
模块提供了高层次的接口来实现并行化。它支持线程池和进程池。
import concurrent.futures
import time
def task(n):
print(f"Task {n} started")
time.sleep(2)
print(f"Task {n} finished")
return n * n
if __name__ == "__main__":
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(task, i) for i in range(10)]
results = [future.result() for future in concurrent.futures.as_completed(futures)]
print(results)
ThreadPoolExecutor
用于线程池,ProcessPoolExecutor
用于进程池。submit
方法提交任务到线程池或进程池。as_completed
方法用于获取已完成任务的结果。multiprocessing
模块multiprocessing
模块提供了创建进程的能力,适用于CPU密集型任务。
import multiprocessing
import time
def task(n):
print(f"Task {n} started")
time.sleep(2)
print(f"Task {n} finished")
return n * n
if __name__ == "__main__":
with multiprocessing.Pool(processes=5) as pool:
results = pool.map(task, range(10))
print(results)
Pool
用于创建进程池。map
方法将任务分配给进程池中的进程并收集结果。joblib
库joblib
是一个用于并行计算的库,特别适用于科学计算。
from joblib import Parallel, delayed
import time
def task(n):
print(f"Task {n} started")
time.sleep(2)
print(f"Task {n} finished")
return n * n
if __name__ == "__main__":
results = Parallel(n_jobs=5)(delayed(task)(i) for i in range(10))
print(results)
Parallel
和 delayed
用于并行化任务。n_jobs
参数指定并行任务的数量。asyncio
模块asyncio
模块用于异步编程,适用于I/O密集型任务。
import asyncio
async def task(n):
print(f"Task {n} started")
await asyncio.sleep(2)
print(f"Task {n} finished")
return n * n
async def main():
tasks = [task(i) for i in range(10)]
results = await asyncio.gather(*tasks)
print(results)
if __name__ == "__main__":
asyncio.run(main())
asyncio.sleep
用于模拟I/O操作。asyncio.gather
用于并发执行多个异步任务并收集结果。选择哪种并行化方法取决于任务的性质:
concurrent.futures.ThreadPoolExecutor
) 适用于I/O密集型任务。concurrent.futures.ProcessPoolExecutor
或 multiprocessing.Pool
) 适用于CPU密集型任务。通过这些方法,可以有效地并行化Python代码,提高程序的执行效率。
领取专属 10元无门槛券
手把手带您无忧上云