Python并发编程与异步IO:提升系统性能
发布时间: 2023-12-16 18:51:16 阅读量: 36 订阅数: 36
# 第一章:理解并发编程
## 1.1 什么是并发编程
## 1.2 并发编程的优势与挑战
## 1.3 Python中的并发编程概述
# 第二章:多线程与多进程
## 2.1 理解多线程与多进程的概念
多线程与多进程是并发编程中常用的两种方式,它们可以让程序实现同时执行多个任务的效果,提高程序的效率和性能。
### 多线程
- 线程是操作系统能够进行运算调度的最小单位。
- 多线程指在同一时间内执行多个线程,可以充分利用多核处理器的优势,加快程序的运行速度。
- 在Python中,可以使用`threading`模块来创建和管理线程。下面是一个简单的多线程示例:
```python
import threading
import time
def print_numbers():
for i in range(5):
print(i)
time.sleep(1)
t1 = threading.Thread(target=print_numbers)
t1.start()
```
### 多进程
- 进程是操作系统进行资源分配和调度的基本单位。
- 多进程指在同一时间内执行多个进程,每个进程拥有独立的内存空间,相互之间不受影响。
- 在Python中,可以使用`multiprocessing`模块来创建和管理进程。下面是一个简单的多进程示例:
```python
import multiprocessing
import time
def count_down(n):
while n > 0:
print('Count down', n)
n -= 1
time.sleep(1)
p1 = multiprocessing.Process(target=count_down, args=(5,))
p1.start()
```
## 2.2 Python中的多线程编程
Python提供了`threading`模块来支持多线程编程,通过创建线程对象并调用`start`方法来实现多线程。此外,还可以使用锁(`Lock`)、条件变量(`Condition`)、信号量(`Semaphore`)等工具来实现线程同步。
下面是一个简单的多线程示例,演示了使用`threading`模块创建线程并实现线程同步的过程:
```python
import threading
import time
total = 4
lock = threading.Lock()
def create_items_1():
global total
for _ in range(10):
time.sleep(2)
lock.acquire()
total += 1
lock.release()
print('10 items created')
def create_items_2():
global total
for _ in range(7):
time.sleep(1)
lock.acquire()
total += 1
lock.release()
print('7 items created')
def limit_items():
global total
while total < 20:
time.sleep(2)
print('Too many items')
creator1 = threading.Thread(target=create_items_1)
creator2 = threading.Thread(target=create_items_2)
limitor = threading.Thread(target=limit_items)
creator1.start()
creator2.start()
limitor.start()
creator1.join()
creator2.join()
limitor.join()
print('Final total:', total)
```
## 2.3 Python中的多进程编程
Python提供了`multiprocessing`模块来支持多进程编程,通过创建进程对象并调用`start`方法来实现多进程。此外,还可以使用队列(`Queue`)、管道(`Pipe`)等工具来实现进程间通信。
下面是一个简单的多进程示例,演示了使用`multiprocessing`模块创建进程并实现进程间通信的过程:
```python
import multiprocessing
def calculate_square(numbers, result, value):
for idx, n in enumerate(numbers):
result[idx] = n * n + value
if __name__ == "__main__":
numbers = [2, 3, 5]
result = multiprocessing.Array('i', 3)
p1 = multiprocessing.Process(target=calculate_square, args=(numbers, result, 5))
p1.start()
p1.join()
print('Result:', result[:])
```
## 2.4 多线程与多进程的适用场景与注意事项
- 多线程适用于I/O密集型任务,如网络请求、文件操作等,能够充分利用等待数据的时间。
- 多进程适用于CPU密集型任务,如复杂的数学计算、图像处理等,能够充分利用多核处理器的优势。
0
0