推荐答案
在 Python 中,可以通过以下几种方式进行并发编程:
- 多线程:使用
threading模块。 - 多进程:使用
multiprocessing模块。 - 异步编程:使用
asyncio模块。 - 协程:使用
asyncio和async/await语法。
多线程示例
// www.javascriptcn.com code example
import threading
def worker():
print("Worker thread")
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()多进程示例
// www.javascriptcn.com code example
import multiprocessing
def worker():
print("Worker process")
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker)
processes.append(p)
p.start()
for p in processes:
p.join()异步编程示例
// www.javascriptcn.com code example
import asyncio
async def worker():
print("Worker coroutine")
async def main():
tasks = [asyncio.create_task(worker()) for _ in range(5)]
await asyncio.gather(*tasks)
asyncio.run(main())本题详细解读
多线程
- 适用场景:I/O 密集型任务,如文件读写、网络请求等。
- 优点:线程间共享内存,通信方便。
- 缺点:由于 GIL(全局解释器锁)的存在,Python 的多线程无法真正并行执行 CPU 密集型任务。
多进程
- 适用场景:CPU 密集型任务,如计算密集型操作。
- 优点:每个进程有独立的 GIL,可以充分利用多核 CPU。
- 缺点:进程间通信较复杂,开销较大。
异步编程
- 适用场景:I/O 密集型任务,尤其是需要处理大量并发 I/O 操作的场景。
- 优点:高效利用单线程,避免线程切换的开销。
- 缺点:代码复杂度较高,需要理解事件循环和协程。
协程
- 适用场景:与异步编程类似,适用于 I/O 密集型任务。
- 优点:代码简洁,易于理解和管理。
- 缺点:需要 Python 3.7+ 支持,且对 CPU 密集型任务效果不佳。
通过合理选择并发编程方式,可以显著提升程序的执行效率。