多线程和多进程的Python实现
1. 多线程实现
1.1 原理
- Python的多线程模块**
threading
**允许程序并发执行多个任务。
- 由于全局解释器锁(GIL),Python的线程可能无法实现真正的并行执行,适合I/O密集型任务。
1.2 示例代码
import threading
import time
def print_numbers(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print(f"{threadName}: {count}")
thread1 = threading.Thread(target=print_numbers, args=("Thread-1", 1,))
thread2 = threading.Thread(target=print_numbers, args=("Thread-2", 2,))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
1.3 代码解释
-
print_numbers
函数接受线程名称和延迟时间作为参数,并在循环中打印数字。
-
threading.Thread
创建线程对象,target
指定线程要执行的函数,args
传递给函数的参数。
-
start()
方法启动线程,join()
方法等待线程完成。
2. 多进程实现
2.1 原理
- Python的**
multiprocessing**
模块允许程序创建多个进程,每个进程有自己的内存空间和Python解释器,可以绕过GIL,适合计算密集型任务。
2.2 示例代码
from multiprocessing import Process
import time
def print_numbers(processName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print(f"{processName}: {count}")
process1 = Process(target=print_numbers, args=("Process-1", 1,))
process2 = Process(target=print_numbers, args=("Process-2", 2,))
process1.start()
process2.start()
process1.join()
process2.join()
2.3 代码解释
-
print_numbers
函数接受进程名称和延迟时间作为参数,并在循环中打印数字。
-
Process
创建进程对象,target
指定进程要执行的函数,args
传递给函数的参数。
-
start()
方法启动进程,join()
方法等待进程完成。
3. 休眠的作用
3.1 原因
- 模拟耗时操作:模拟文件读写、网络通信等耗时任务。
- 避免过快执行:减慢执行速度,便于观察输出。
- 展示并发效果:增加线程切换机会,展示并发执行效果。
- 避免资源竞争:减少同时访问共享资源的可能性。
- 控制执行顺序:通过调整休眠时间,影响执行顺序。
- 测试和调试:帮助开发者理解执行流程,定位问题。
3.2 示例代码中的休眠
- 在多线程和多进程的示例代码中,
time.sleep(delay)
用于休眠指定的时间(秒),其中delay
是传递给函数的参数。