Python threading的使用方法解析
什么是Python threading
Python threading库是关于多线程的一个库,它提供了多线程编程所需的所有基本功能。Python threading库提供了一个Thread类来处理所有线程相关的操作。这个类派生于原始的_thread模块。其提供以下方法:
- run(): 线程的入口函数,线程启动时会自动运行该函数;
- start(): 启动一个线程;
- join(): 阻塞调用线程直到该线程执行完毕;
- isAlive(): 确定该线程是否在运行中;
- getName(): 返回线程名字;
- setName(): 设置线程名字。
如何使用Python threading
在使用Python threading的过程中,我们需要引入 threading 模块,使用 threading.Thread() 构造函数创建线程实例,然后调用 start() 函数来启动线程。
示例1:创建一个简单的线程
import threading
import time
def print_time(thread_name, delay):
count = 0
while count < 3:
time.sleep(delay)
count += 1
print("%s: %s" % (thread_name, time.ctime(time.time())))
# 创建两个线程
try:
thread1 = threading.Thread(target=print_time, args=("Thread-1", 1))
thread2 = threading.Thread(target=print_time, args=("Thread-2", 2))
# 启动线程
thread1.start()
thread2.start()
# 等待线程结束
thread1.join()
thread2.join()
print("退出主线程")
except:
print("无法启动线程")
在这个例子中,我们创建了 print_time() 函数,用来打印时间。然后我们使用 threading.Thread() 函数创建了两个线程实例,调用 start() 启动线程。主线程等待两个子线程结束后退出。
示例2:线程同步
当多个线程操作同一份数据时,可能会发生冲突的情况,需要进行线程同步。Python threading模块提供了一个Lock类来实现线程同步。
import threading
class MyThread (threading.Thread):
def __init__(self, thread_id, name, counter):
threading.Thread.__init__(self)
self.thread_id = thread_id
self.name = name
self.counter = counter
def run(self):
print("Starting " + self.name)
# 获取锁,用于线程同步
threadLock.acquire()
print_time(self.name, self.counter, 3)
# 释放锁,开启下一个线程
threadLock.release()
def print_time(thread_name, delay, counter):
while counter:
time.sleep(delay)
print("%s: %s" % (thread_name, time.ctime(time.time())))
counter -= 1
threadLock = threading.Lock()
threads = []
# 创建线程
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)
# 启动线程
thread1.start()
thread2.start()
# 等待线程结束
threads.append(thread1)
threads.append(thread2)
for t in threads:
t.join()
print("退出主线程")
在这个例子中,我们使用了 MyThread 类来创建线程,这个类继承了 threading.Thread 类。我们在 run() 函数中使用 threadLock.acquire() 获取锁来实现线程同步,然后使用 threadLock.release() 释放锁,开启下一个线程。
总结
Python threading提供了多线程编程所需的所有基本功能,包括线程的启动、线程同步等。在多线程编程中需要注意线程同步以避免冲突,并考虑到线程安全问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python threading的使用方法解析 - Python技术站