Python 并发的意义

  • Post category:Python

Python 并发指的是在一个程序中同时运行多个独立的任务。这些任务可以是在同一个 CPU 核心上交替执行的,也可以是在多个 CPU 或者多台机器上同时执行的。使用Python 并发可以提高程序的效率,缩短程序的运行时间。

并发的意义

在Python中使用并发,可以帮助我们更有效地利用计算资源。例如,如果你需要下载一些文件,你可以并发地下载这些文件,这样就可以在短时间内完成任务。并发还可以处理大量同时到达的请求,例如Web服务器处理多个HTTP请求,或者对多个客户端进行数据处理等。

并发的使用方法

在 Python 中有多种并发实现方式,如多线程、多进程、协程、异步 IO 等。下面分别介绍两个示例,一个使用多线程,一个使用协程。

多线程示例

下面是一个简单的多线程示例,从网上下载多个图片并保存到本地:

import requests
import threading

def download(url, filename):
    r = requests.get(url)
    with open(filename, 'wb') as f:
        f.write(r.content)

urls = [
    'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png',
    'https://www.python.org/static/community_logos/python-powered-w-200x80.png',
    'https://www.python.org/static/community_logos/python-logo-title-dark.png'
]

threads = []

for i, url in enumerate(urls):
    filename = f'python_logo_{i}.png'
    t = threading.Thread(target=download, args=(url, filename))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

print('下载完成')

代码中首先定义了下载函数download,接着定义了3个需要下载的图片的URL地址,然后创建多个线程并行下载这些图片。最后在所有线程都完成下载操作之后输出提示信息。

协程示例

下面是一个简单的协程示例,从网上下载多个图片并保存到本地:

import asyncio
import aiohttp

async def download(url, filename):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            async with aiofiles.open(filename, 'wb') as f:
                while True:
                    chunk = await resp.content.read(1024)
                    if not chunk:
                        break
                    await f.write(chunk)

async def main():
    urls = [
        'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png',
        'https://www.python.org/static/community_logos/python-powered-w-200x80.png',
        'https://www.python.org/static/community_logos/python-logo-title-dark.png'
    ]

    tasks = [download(url, f'python_logo_{i}.png') for i, url in enumerate(urls)]
    await asyncio.gather(*tasks)

print('开始下载')
asyncio.run(main())
print('下载完成')

代码中首先定义了下载函数download,接着定义了3个需要下载的图片的URL地址,然后创建多个协程并行下载这些图片。最后在所有协程都完成下载操作之后输出提示信息。

总结

在Python中使用并发可以提高程序的效率,缩短程序的运行时间。Python支持多种并发实现方式,如多线程、多进程、协程、异步 IO 等。使用具体的并发方式需要根据实际场景选择。