首先,我们来介绍一下什么是 Python 的 threading 包。
Python 的 threading 包提供了对线程操作的支持。线程表示一个独立的控制流,它允许我们同时执行多个流程。对于 Python 程序,即使没有手动创建过线程,也会默认有一个主线程,它会在程序启动时自动创建。同时,Python 还提供了一些库函数,可以在任意时刻操作线程。
下面,我们来看几个 threading 包的使用示例:
示例 1:创建线程
使用 threading 包创建线程非常简单,只需要继承 threading.Thread 类,重写 run() 方法即可。以下代码演示了如何创建一个线程:
import threading
# 继承 threading.Thread 类创建线程类
class MyThread(threading.Thread):
def run(self):
print(threading.current_thread().name + " 正在运行")
if __name__ == "__main__":
# 创建 MyThread 的实例
thread = MyThread()
# 运行线程
thread.start()
以上代码定义了一个名为 MyThread
的类,它继承了 threading.Thread 类,重写了 run() 方法。在 run() 方法中,我们打印出当前运行的线程名。程序运行时,将会创建 MyThread 的实例,并调用 start() 方法运行线程。
示例 2:在线程中使用锁
在多线程程序中,我们通常需要在多个线程之间共享资源。为了避免不同线程之间对同一资源进行竞争而导致数据错乱的情况,我们需要使用锁。以下代码演示了如何在线程中使用锁:
import threading
# 共享资源
count = 0
# 创建锁
lock = threading.Lock()
# 继承 threading.Thread 类创建线程类
class MyThread(threading.Thread):
def run(self):
# 声明 count 为全局变量
global count
# 获取锁
lock.acquire()
for i in range(10000):
# 计数操作
count += 1
# 释放锁
lock.release()
if __name__ == "__main__":
# 创建 10 个 MyThread 的实例,并运行它们
threads = [MyThread() for i in range(10)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
# 输出 count 的值
print("最终的 count 值为:", count)
以上代码定义了一个名为 MyThread
的类,并声明了一个全局变量 count 和一个锁 lock。在 run() 方法中,我们首先获取锁,然后进行计数操作,最后释放锁。主程序中创建了 10 个 MyThread 的实例,依次运行它们,并在所有线程结束后输出 count 的最终值。可以看到,通过使用锁,我们可以避免多个线程对同一资源进行竞争而导致的数据错乱。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 包之 threading 多线程 - Python技术站