Python学习(12)学习线程、进程和异步IO的概念
进程
概念:
- 进程是程序的一次执行活动,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间和系统资源,不同进程之间的数据不共享。
示例:
在Python中,可以通过multiprocessing
模块来创建进程。以下是一个简单的示例,演示如何创建和启动进程。
import multiprocessing
def worker():
"""工作函数,模拟进程的执行"""
print("进程正在执行...")
if __name__ == "__main__":
# 创建进程
process = multiprocessing.Process(target=worker)
# 启动进程
process.start()
# 等待进程结束
process.join()
print("进程执行完毕")
线程
概念:
- 线程是进程中的一个执行单元,是系统进行调度的最小单位。一个进程可以包含一个或多个线程,这些线程共享进程的资源。与进程相比,线程的创建和切换开销较小。
示例:
在Python中,可以通过threading
模块来创建线程。以下是一个简单的示例,演示如何创建和启动线程。
import threading
def worker():
"""工作函数,模拟线程的执行"""
print("线程正在执行...")
if __name__ == "__main__":
# 创建线程
thread = threading.Thread(target=worker)
# 启动线程
thread.start()
# 等待线程结束
thread.join()
print("线程执行完毕")
异步IO
概念:
- 异步IO是一种非阻塞的IO操作方式。在进行异步IO操作时,程序不会因为等待IO操作完成而阻塞,而是可以在等待过程中继续执行其他任务,从而提高了程序的并发性能和响应速度。
示例:
在Python中,可以使用asyncio
库来实现异步IO。以下是一个简单的示例,演示如何使用异步IO来并发地读取多个网页的内容。
import asyncio
import aiohttp
async def fetch_content(url):
"""异步函数,用于从指定的URL地址读取内容"""
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
content = await response.text()
print(f"Read {len(content)} characters from {url}")
async def main():
"""主函数,用于并发地读取多个网页的内容"""
urls = [
"https://www.example.com",
"https://www.example.net",
"https://www.example.org"
]
tasks = [fetch_content(url) for url in urls]
await asyncio.gather(*tasks) # 运行异步任务
if __name__ == "__main__":
# 运行异步主函数
asyncio.run(main())
总结
- 进程:独立的执行环境,拥有自己的内存空间和系统资源,不同进程之间的数据不共享。
- 线程:进程中的执行单元,共享进程的资源,线程的创建和切换开销较小。
- 异步IO:非阻塞的IO操作方式,提高程序的并发性能和响应速度。