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

更新于: 2020-01-31

9K+ 阅读量

开启你的 职业生涯

完成课程获得认证

立即开始
广告