python只使用Queue和Thread自己實現一個最簡單的執行緒池
阿新 • • 發佈:2018-12-12
我的思路就是就是寫一個TifCutting類繼承自Thread,這個類裡有個屬性Queue;有一個addTask新增任務的方法,這個方法是把需要執行的函式放到Queue裡;因為繼承自Thread類,一定有一個重寫的run方法,這個方法是從自己的Queue屬性裡獲取函式,然後執行;有一個StartRun方法,這個方法開了多個執行緒去執行自身TifCutting類的run方法,即呼叫多執行緒裡的start方法。直接上程式碼吧,大家一看就明白了:
#coding=utf-8 from threading import Thread from Queue import Queue import time class TifCutting(Thread): _running = [] taskQueue = Queue() def __init__(self): super(TifCutting, self).__init__() self.stop = False @classmethod def addTask(cls, filePath): def taskFunc(): print 'start %s' % filePath time.sleep(1) print 'end %s' % filePath cls.taskQueue.put(taskFunc) @classmethod def startRun(cls, threadNum=3): for i in range(threadNum): t = TifCutting() t.start() cls._running.append(t) @classmethod def stopRun(cls): for t in cls._running: t.stop = True cls._running = [] def run(self): while not self.stop: task = TifCutting.taskQueue.get(timeout=1) task() tifCutting = TifCutting() for i in range(100): tifCutting.addTask('filePath_%s' % i) tifCutting.startRun()
我水平太有限,有啥不對的地方歡迎大家指正。。抱拳