Python實現(xiàn)線程池代碼分享
更新時間:2015年06月21日 16:32:50 投稿:junjie
這篇文章主要介紹了Python實現(xiàn)線程池代碼分享,本文直接給出實例代碼,需要的朋友可以參考下
原理:建立一個任務隊列,然多個線程都從這個任務隊列中取出任務然后執(zhí)行,當然任務隊列要加鎖,詳細請看代碼
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
相關(guān)文章
python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中
這篇文章主要介紹了python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python使用requests實現(xiàn)發(fā)送帶文件請求功能
這篇文章主要介紹了python使用requests實現(xiàn)發(fā)送帶文件請求,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12Python實現(xiàn)的棧、隊列、文件目錄遍歷操作示例
這篇文章主要介紹了Python實現(xiàn)的棧、隊列、文件目錄遍歷操作,結(jié)合實例形式分析了Python數(shù)據(jù)結(jié)構(gòu)中棧與隊列的定義、使用,以及文件目錄的遍歷相關(guān)操作技巧,需要的朋友可以參考下2019-05-05