Python 的线程模块
Python 2.4 中包含的较新的 threading 模块提供了比上一节讨论的 thread 模块更强大、更高级的线程支持。
threading 模块公开了 thread 模块的所有方法,并提供了一些其他方法:
- threading.activeCount() - 返回活动线程对象的数目。
- threading.currentThread() - 返回调用方线程控制中的线程对象数目。
- threading.enumerate() - 返回当前活动的所有线程对象的列表。
除了这些方法外,threading 模块还有 Thread 类来实现线程。Thread 类提供的方法如下:
- run() - run() 方法是线程的入口点。
- start() - start() 方法通过调用 run 方法启动线程。
- join([time]) - join() 等待线程终止。
- isAlive() - isAlive() 方法检查线程是否仍在执行。
- getName() - getName() 方法返回线程的名称。
- setName() - setName() 方法设置线程的名称。
使用 Threading 模块创建线程
要使用 threading 模块实现新线程,您需要执行以下操作:
- 定义 Thread 类的新的子类。
- 重写 __init__(self [,args]) 方法以添加其他参数。
- 然后,重写 run(self [,args]) 方法以实现线程启动后应执行的操作。
创建新的 Thread 子类后,您可以创建它的实例,然后通过调用 start() 启动新线程,该方法依次调用 run() 方法。
示例
#!/usr/bin/python import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name print_time(self.name, 5, self.counter) print "Exiting " + self.name def print_time(threadName, counter, delay): while counter: if exitFlag: threadName.exit() time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 # Create new threads thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # Start new Threads thread1.start() thread2.start() print "Exiting Main Thread"
执行上述代码时,会产生以下结果:
Starting Thread-1 Starting Thread-2 Exiting Main Thread Thread-1: Thu Mar 21 09:10:03 2013 Thread-1: Thu Mar 21 09:10:04 2013 Thread-2: Thu Mar 21 09:10:04 2013 Thread-1: Thu Mar 21 09:10:05 2013 Thread-1: Thu Mar 21 09:10:06 2013 Thread-2: Thu Mar 21 09:10:06 2013 Thread-1: Thu Mar 21 09:10:07 2013 Exiting Thread-1 Thread-2: Thu Mar 21 09:10:08 2013 Thread-2: Thu Mar 21 09:10:10 2013 Thread-2: Thu Mar 21 09:10:12 2013 Exiting Thread-2
广告