[root@bogon python]# cat test.py #!/usr/bin/ptyhonimport threadimport timedef print_time(threadName,delay): count=0 while count<5: time.sleep(delay) count+1 print "%s: %s"%(threadName,time.ctime(time.time()))try: thread.start_new_thread(print_time,('Thread 1:',1)) thread.start_new_thread(print_time,('Thread 2:',2))except: print 'error:fail to start'while 1: pass[root@bogon python]# python test.py Thread 1:: Sun Jun 18 18:00:01 2017Thread 2:: Sun Jun 18 18:00:02 2017Thread 1:: Sun Jun 18 18:00:02 2017Thread 1:: Sun Jun 18 18:00:03 2017//线程模块[root@bogon python]# cat b.py #!/usr/bin/pythonimport threadingimport timeexitFlag=0class 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,self.counter,5) print "exiting "+self.namedef print_time(threadName,delay,counter): while counter: if exitFlag: threading.Thread.exit() time.sleep(delay) print "%s: %s"%(threadName,time.ctime(time.time())) counter-=1thread1=myThread(1,'Thread 1: ',1)thread2=myThread(2,'Thread 2: ',2)thread1.start()thread2.start()print "exiting main thread"[root@bogon python]# ./b.pyStarting Thread 1: Starting Thread 2: exiting main threadThread 1: : Sun Jun 18 18:15:24 2017Thread 1: : Sun Jun 18 18:15:25 2017Thread 2: : Sun Jun 18 18:15:25 2017Thread 1: : Sun Jun 18 18:15:26 2017Thread 1: : Sun Jun 18 18:15:27 2017Thread 2: : Sun Jun 18 18:15:27 2017Thread 1: : Sun Jun 18 18:15:28 2017exiting Thread 1: Thread 2: : Sun Jun 18 18:15:29 2017Thread 2: : Sun Jun 18 18:15:31 2017Thread 2: : Sun Jun 18 18:15:33 2017exiting Thread 2: [root@bogon python]# //线程同步[root@bogon python]# cat c.py#!/usr/bin/python# -*- coding: UTF-8 -*-import threadingimport timeclass 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 # 获得锁,成功获得锁定后返回True # 可选的timeout参数不填时将一直阻塞直到获得锁定 # 否则超时后将返回False threadLock.acquire() print_time(self.name, self.counter, 3) # 释放锁 threadLock.release()def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1threadLock = 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 "Exiting Main Thread"[root@bogon python]# ./c.pyStarting Thread-1Starting Thread-2Thread-1: Sun Jun 18 18:25:39 2017Thread-1: Sun Jun 18 18:25:40 2017Thread-1: Sun Jun 18 18:25:41 2017Thread-2: Sun Jun 18 18:25:43 2017Thread-2: Sun Jun 18 18:25:45 2017Thread-2: Sun Jun 18 18:25:47 2017Exiting Main Thread[root@bogon python]# //线程的优先级队列#!/usr/bin/python# -*- coding: UTF-8 -*- import Queueimport threadingimport timeexitFlag = 0 class myThread (threading.Thread): def __init__(self, threadID, name, q): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.q = q def run(self): print "Starting " + self.name process_data(self.name, self.q) print "Exiting " + self.namedef process_data(threadName, q): while not exitFlag: queueLock.acquire() if not workQueue.empty(): data = q.get() queueLock.release() print "%s processing %s" % (threadName, data) else: queueLock.release() time.sleep(1) threadList = ["Thread-1", "Thread-2", "Thread-3"]nameList = ["One", "Two", "Three", "Four", "Five"]queueLock = threading.Lock()workQueue = Queue.Queue(10)threads = []threadID = 1 # 创建新线程for tName in threadList: thread = myThread(threadID, tName, workQueue) thread.start() threads.append(thread) threadID += 1# 填充队列queueLock.acquire()for word in nameList: workQueue.put(word)queueLock.release() # 等待队列清空while not workQueue.empty(): pass # 通知线程是时候退出exitFlag = 1 # 等待所有线程完成for t in threads: t.join()print "Exiting Main Thread"以上程序执行结果:Starting Thread-1Starting Thread-2Starting Thread-3Thread-1 processing OneThread-2 processing TwoThread-3 processing ThreeThread-1 processing FourThread-2 processing FiveExiting Thread-3Exiting Thread-1Exiting Thread-2Exiting Main Thread....