Python實現執行緒池

2021-06-25 11:22:13 字數 2323 閱讀 6709

最近在做一些文字處理方面的事情,考慮到程式利用併發性可以提高執行效率(不糾結特殊反例),於是入圍的idea如使用多程序或多執行緒達到期望的目標,對於程序或執行緒的建立是有代價的,那麼我們是否可以實現乙個執行緒池來達到已建立的執行緒反覆使用從而使代價降低到最小呢?

當然可以,要想建立乙個執行緒池,那麼必須得有個容器來模擬「池」,在python中,佇列這樣的資料結構就可以幫我們解決「池」這個問題,然而隨之引來的 多執行緒之間資料處理同步問題,好在python中有個queue模組幫我們解決了這一棘手的問題,那麼我們就可以實現乙個執行緒池的雛形了。

python**  

# !/usr/bin/env python

# -*- coding:utf-8 -*-

import queue  

import threading  

import time  

class workmanager(object):  

def __init__(self, work_num=1000,thread_num=2):  

self.work_queue = queue.queue()  

self.threads =   

self.__init_work_queue(work_num)  

self.__init_thread_pool(thread_num)  

"""初始化執行緒

"""def __init_thread_pool(self,thread_num):  

for i in range(thread_num):  

"""初始化工作佇列

"""def __init_work_queue(self, jobs_num):  

for i in range(jobs_num):  

self.add_job(do_job, i)  

"""新增一項工作入隊

"""def add_job(self, func, *args):  

self.work_queue.put((func, list(args)))#任務入隊,queue內部實現了同步機制

"""等待所有執行緒執行完畢

"""def wait_allcomplete(self):  

for item in

self.threads:  

if item.isalive():item.join()  

class work(threading.thread):  

def __init__(self, work_queue):  

threading.thread.__init__(self)  

self.work_queue = work_queue  

self.start()  

def run(self):  

#死迴圈,從而讓建立的執行緒在一定條件下關閉退出

while

true:  

try:  

do, args = self.work_queue.get(block=false)#任務非同步出隊,queue內部實現了同步機制

do(args)  

self.work_queue.task_done()#通知系統任務完成

except:  

break

#具體要做的任務

def do_job(args):  

time.sleep(0.1)#模擬處理時間

print threading.current_thread(), list(args)  

if __name__ == '__main__':  

start = time.time()  

work_manager =  workmanager(10000, 10)#或者work_manager =  workmanager(10000, 20)

work_manager.wait_allcomplete()  

end = time.time()  

print

"cost all time: %s" % (end-start)  

2次開啟不同的執行緒數執行結果如下:

python**  

#work_manager =  workmanager(10000, 10)

cost all time: 100.641790867(單位:秒)  

#work_manager =  workmanager(10000, 20)

cost all time:50.5233478546(單位:秒)  

上面實現了執行緒池的雛形,展現了基本原理,當然要想成為通用的api需要做很多的工作,希望本文能夠起到拋磚引玉的效果。

Python執行緒池實現

執行緒池 coding gb2312 created on apr 10,2014 author liyunfeng see 執行緒池模組 import queue import sys import threading from time import ctime class threadpool...

python實現執行緒池

usr bin env python coding utf 8 import queue import threading import time class workmanager object def init self,work num 1000,thread num 10 work num是...

python多執行緒執行緒池實現

在python中多執行緒可以使用threading來實現,但實際使用時考慮效能等,大多會使用到執行緒池,下面就是基於python2和python3來說明下執行緒池的使用。import time def testthread fl time.sleep 1 print print fl return ...