Python多线程

#!/usr/bin/env python3
#coding=utf-8

import threading
import time
import ThreadTime
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("开始线程:"+self.name)
        print_time(self.name,self.counter,5)
        print("退出线程:"+self.name)

def print_time(threadName,delay,counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print("%s:%s"%(threadName,time.ctime(time.time())))
        counter-=1
#创建连个线程
try:
    #创建新线程
    thread1=myThread(1,"Thread-1",1)
    thread2=myThread(2,"Thread-2",2)
    #开启新线程
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print("退出主线程")
except:
    print("Error:无法启动线程")
#线程同步
#
!/usr/bin/env python3 #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("开启线程:"+self.name) #获取锁,用于线程同步 threadLock.acquire() print_time(self.name,self.counter,6) #释放锁,开启下一个线程 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("退出线程"+t.name) print("退出主线程")

 

#!/usr/bin/env python3
#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 ("开启线程:" + self.name) process_data(self.name, self.q) print ("退出线程:" + 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 ("退出主线程")

运行结果:

开启线程:Thread-2
开启线程:Thread-3
Thread-1 processing One
Thread-3 processing Two
Thread-2 processing Three
Thread-1 processing Four
Thread-3 processing Five
退出线程:Thread-2
退出线程:Thread-1
退出线程:Thread-3
退出主线程

 

posted @ 2018-01-31 15:15  (时光)光阴飞逝  阅读(223)  评论(0)    收藏  举报