python基础(八)——多线程

时间:2023-01-30 22:27:08
[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
....