Python多线程thread及模块使用实例

1. 简介

Python中的多线程(multithreading)是指同时运行多个线程,Python提供了threadthreading等模块来支持多线程编程。

2. thread模块

2.1 thread模块的使用

Python中的thread模块是底层的线程模块,使用该模块需要了解一些线程的基本知识。

以下是一个简单的使用thread模块的示例:

import thread

import time

# 定义线程函数

def print_time(threadName, delay, count):

while count:

time.sleep(delay)

print("%s: %s" % (threadName, time.ctime(time.time())))

count -= 1

# 创建两个线程

try:

thread.start_new_thread(print_time, ("Thread-1", 1, 5))

thread.start_new_thread(print_time, ("Thread-2", 2, 5))

except:

print("Error: 无法启动线程")

# 主线程等待子线程结束

while 1:

pass

上述代码定义了一个print_time函数作为线程的执行函数,thread.start_new_thread函数用于启动线程。在主线程中,使用一个死循环使其等待子线程结束。

3. threading模块

3.1 threading模块的使用

Python中的threading模块是高级的线程模块,使用该模块可以更方便地实现多线程编程。

以下是使用threading模块的示例:

import threading

import time

# 定义线程类

class MyThread(threading.Thread):

def __init__(self, threadName, delay, count):

threading.Thread.__init__(self)

self.threadName = threadName

self.delay = delay

self.count = count

def run(self):

print("Starting " + self.threadName)

print_time(self.threadName, self.delay, self.count)

print("Exiting " + self.threadName)

# 定义线程函数

def print_time(threadName, delay, count):

while count:

time.sleep(delay)

print("%s: %s" % (threadName, time.ctime(time.time())))

count -= 1

# 创建两个线程

try:

thread1 = MyThread("Thread-1", 1, 5)

thread2 = MyThread("Thread-2", 2, 5)

thread1.start()

thread2.start()

except:

print("Error: 无法启动线程")

# 主线程等待子线程结束

thread1.join()

thread2.join()

print("Exiting Main Thread")

上述代码定义了一个MyThread类作为线程的执行类,MyThread类继承自threading.Thread类,并重写了run方法。在主线程中,通过创建MyThread类的实例并调用start方法来启动线程。使用join方法让主线程等待子线程结束。

3.2 threading模块的高级特性

除了可以使用Thread类来创建线程外,Python的threading模块还提供了一些高级特性,例如:

Lock对象,用于控制线程的共享资源的访问。

Condition对象,用于线程之间的通信,类似于Java中的waitnotify机制。

Event对象,用于线程之间的事件通知。

Semaphore对象,用于限制线程的并发数量。

以下是一个使用Lock对象的示例:

import threading

import time

# 定义线程类

class MyThread(threading.Thread):

def __init__(self, threadName, delay, count, lock):

threading.Thread.__init__(self)

self.threadName = threadName

self.delay = delay

self.count = count

self.lock = lock

def run(self):

print("Starting " + self.threadName)

self.lock.acquire()

print_time(self.threadName, self.delay, self.count)

self.lock.release()

print("Exiting " + self.threadName)

# 定义线程函数

def print_time(threadName, delay, count):

while count:

time.sleep(delay)

print("%s: %s" % (threadName, time.ctime(time.time())))

count -= 1

# 创建线程锁

lock = threading.Lock()

# 创建两个线程

try:

thread1 = MyThread("Thread-1", 1, 5, lock)

thread2 = MyThread("Thread-2", 2, 5, lock)

thread1.start()

thread2.start()

except:

print("Error: 无法启动线程")

# 主线程等待子线程结束

thread1.join()

thread2.join()

print("Exiting Main Thread")

上述代码在MyThread类中添加了一个lock参数,并在线程执行函数中使用lock.acquire()lock.release()来控制共享资源的访问。

4. 总结

Python的多线程编程可以使用threadthreading等模块来实现。其中,thread是底层的线程模块,使用该模块需要了解一些线程的基本知识;threading是高级的线程模块,使用该模块可以更方便地实现多线程编程,并提供了一些高级特性,例如:LockConditionEventSemaphore等对象,用于控制线程的共享资源的访问、线程之间的通信和事件通知等。

后端开发标签