import queue import threading import time class WorkManager: def __init__(self): self.done_work = [] self.target_work = queue.Queue() def isEmpty(self): return self.target_work.empty() def getNewWork(self): return self.target_work.get() def addNewWork(self, newWork): if newWork in self.done_work: pass else: self.done_work.append(newWork) self.target_work.put(newWork) def addDoneWork(self, doneWork): self.done_work.append(doneWork) class DoWork(threading.Thread): def __init__(self, workManager, name): threading.Thread.__init__(self) self.workManager = workManager self.name = name def run(self): while not self.workManager.isEmpty(): target = self.workManager.getNewWork() print('%s do the work:%d' % (self.name, target)) time.sleep(1) if __name__ == '__main__': need_to_do_array = [1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 9, 10] workManager = WorkManager(); for i in range(len(need_to_do_array)): workManager.addNewWork(need_to_do_array[i]) start_time = time.time() all_thread_work = [] for i in range(5): t = DoWork(workManager, "name_%d" % i) all_thread_work.append(t) for i in range(len(all_thread_work)): all_thread_work[i].start() for i in range(len(all_thread_work)): all_thread_work[i].join() end_time = time.time() used_time = end_time - start_time print(used_time)
1.总结下,就是要继承Thread,然后run一下就可以。 可以看到5个线程,本来要10秒的工作,2秒就做完了。
3332
[…] 《Python 多线程》 可以跟这篇文章进行比较 […]