Python實(shí)現(xiàn)線程池代碼分享
更新時(shí)間:2015年06月21日 16:32:50 投稿:junjie
這篇文章主要介紹了Python實(shí)現(xiàn)線程池代碼分享,本文直接給出實(shí)例代碼,需要的朋友可以參考下
原理:建立一個(gè)任務(wù)隊(duì)列,然多個(gè)線程都從這個(gè)任務(wù)隊(duì)列中取出任務(wù)然后執(zhí)行,當(dāng)然任務(wù)隊(duì)列要加鎖,詳細(xì)請(qǐng)看代碼
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
您可能感興趣的文章:
- python線程池threadpool使用篇
- Python自定義線程池實(shí)現(xiàn)方法分析
- 用python實(shí)現(xiàn)的線程池實(shí)例代碼
- 淺談python 線程池threadpool之實(shí)現(xiàn)
- python線程池(threadpool)模塊使用筆記詳解
- php與python實(shí)現(xiàn)的線程池多線程爬蟲功能示例
- python實(shí)現(xiàn)線程池的方法
- 用Python實(shí)現(xiàn)一個(gè)簡單的線程池
- python線程池的實(shí)現(xiàn)實(shí)例
- python線程池threadpool實(shí)現(xiàn)篇
相關(guān)文章
python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中
這篇文章主要介紹了python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python使用requests實(shí)現(xiàn)發(fā)送帶文件請(qǐng)求功能
這篇文章主要介紹了python使用requests實(shí)現(xiàn)發(fā)送帶文件請(qǐng)求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
Python實(shí)現(xiàn)的棧、隊(duì)列、文件目錄遍歷操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的棧、隊(duì)列、文件目錄遍歷操作,結(jié)合實(shí)例形式分析了Python數(shù)據(jù)結(jié)構(gòu)中棧與隊(duì)列的定義、使用,以及文件目錄的遍歷相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
基于Python編寫一個(gè)點(diǎn)名器的示例代碼
想起小學(xué)的時(shí)候老師想點(diǎn)名找小伙伴回答問題的時(shí)候,老師竟斥巨資買了個(gè)點(diǎn)名器。今日無聊便敲了敲小時(shí)候老師斥巨資買的點(diǎn)名器,希望對(duì)大家有幫助2022-07-07

