python基础(八)——多线程

[root@bogon python]# cat test.py 
#!/usr/bin/ptyhon
import thread
import time
def 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 2017
Thread 2:: Sun Jun 18 18:00:02 2017
Thread 1:: Sun Jun 18 18:00:02 2017
Thread 1:: Sun Jun 18 18:00:03 2017


//线程模块
[root@bogon python]# cat b.py 
#!/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,self.counter,5)
        print "exiting "+self.name
def print_time(threadName,delay,counter):
    while counter:
        if exitFlag:
            threading.Thread.exit()
        time.sleep(delay)
        print "%s: %s"%(threadName,time.ctime(time.time()))
        counter-=1
thread1=myThread(1,'Thread 1: ',1)
thread2=myThread(2,'Thread 2: ',2)
thread1.start()
thread2.start()
print "exiting main thread"
[root@bogon python]# ./b.py
Starting  Thread 1: 
Starting  Thread 2: 
exiting main thread
Thread 1: : Sun Jun 18 18:15:24 2017
Thread 1: : Sun Jun 18 18:15:25 2017
Thread 2: : Sun Jun 18 18:15:25 2017
Thread 1: : Sun Jun 18 18:15:26 2017
Thread 1: : Sun Jun 18 18:15:27 2017
Thread 2: : Sun Jun 18 18:15:27 2017
Thread 1: : Sun Jun 18 18:15:28 2017
exiting Thread 1: 
Thread 2: : Sun Jun 18 18:15:29 2017
Thread 2: : Sun Jun 18 18:15:31 2017
Thread 2: : Sun Jun 18 18:15:33 2017
exiting Thread 2: 
[root@bogon python]# 

//线程同步

[root@bogon python]# cat c.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import threading
import time
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
       # 获得锁,成功获得锁定后返回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 -= 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 "Exiting Main Thread"

[root@bogon python]# ./c.py
Starting Thread-1
Starting Thread-2
Thread-1: Sun Jun 18 18:25:39 2017
Thread-1: Sun Jun 18 18:25:40 2017
Thread-1: Sun Jun 18 18:25:41 2017
Thread-2: Sun Jun 18 18:25:43 2017
Thread-2: Sun Jun 18 18:25:45 2017
Thread-2: Sun Jun 18 18:25:47 2017
Exiting Main Thread
[root@bogon python]# 





//线程的优先级队列
#!/usr/bin/python
# -*- coding: UTF-8 -*- 
import Queue
import threading
import time
exitFlag = 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.name
def 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-1
Starting Thread-2
Starting Thread-3
Thread-1 processing One
Thread-2 processing Two
Thread-3 processing Three
Thread-1 processing Four
Thread-2 processing Five
Exiting Thread-3
Exiting Thread-1
Exiting Thread-2
Exiting Main Thread
....

posted on 2017-10-25 18:06  标配的小号  阅读(179)  评论(0编辑  收藏  举报

导航