萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> Python實現線程池代碼分享

Python實現線程池代碼分享

   這篇文章主要介紹了Python實現線程池代碼分享,本文直接給出實例代碼,需要的朋友可以參考下

  原理:建立一個任務隊列,然多個線程都從這個任務隊列中取出任務然後執行,當然任務隊列要加鎖,詳細請看代碼

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 import threading import time import signal import os   class task_info(object): def __init__(self): self.func = None self.parm0 = None self.parm1 = None self.parm2 = None   class task_list(object): def __init__(self): self.tl = [] self.mutex = threading.Lock() self.sem = threading.Semaphore(0)   def append(self, ti): self.mutex.acquire() self.tl.append(ti) self.mutex.release() self.sem.release()   def fetch(self): self.sem.acquire() self.mutex.acquire() ti = self.tl.pop(0) self.mutex.release() return ti   class thrd(threading.Thread): def __init__(self, tl): threading.Thread.__init__(self) self.tl = tl   def run(self): while True: tsk = self.tl.fetch() tsk.func(tsk.parm0, tsk.parm1, tsk.parm2)   class thrd_pool(object): def __init__(self, thd_count, tl): self.thds = []   for i in range(thd_count): self.thds.append(thrd(tl))   def run(self): for thd in self.thds: thd.start()     def func(parm0=None, parm1=None, parm2=None): print 'count:%s, thrd_name:%s'%(str(parm0), threading.currentThread().getName())   def cleanup(signo, stkframe): print ('Oops! Got signal %s', signo)   os._exit(0)   if __name__ == '__main__':   signal.signal(signal.SIGINT, cleanup) signal.signal(signal.SIGQUIT, cleanup) signal.signal(signal.SIGTERM, cleanup)   tl = task_list() tp = thrd_pool(6, tl) tp.run()   count = 0 while True:   ti = task_info() ti.parm0 = count ti.func = func tl.append(ti) count += 1   time.sleep(2) pass
copyright © 萬盛學電腦網 all rights reserved