#!/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是總的任務數,thread_num是每次同時工作的執行緒數量
self.work_queue = queue.queue() #
初始化乙個執行緒佇列
self.threads = #
該列表存放要進行工作的執行緒類work的物件,該列表的大小是根據thread_num來指定的
self.__init_work_queue(work_num) #
初始化工作佇列,將所有的工作佇列放進執行緒池
self.__init_thread_pool(thread_num) #
初始化執行緒池,將所有的工作執行緒放進執行緒池列表
#self.check_queue()
def__init_thread_pool(self,thread_num): #
初始化執行緒池,將工作執行緒從佇列取出放進執行緒池列表
for i in
range(thread_num):
def__init_work_queue(self, work_num): #
初始化工作佇列,將所有的工作放進佇列
for i in
range(work_num):
self.add_job(do_job, i)
#將實際的工作函式放進佇列
def add_job(self, func, *args): #
新增乙個工作入佇列,func是實際的工作函式
self.work_queue.put((func, list(args))) #
將實際的工作函式新增入佇列,引數args要用列表形式,queue.queue內部實現了同步機制
def check_queue(self): #
檢查剩餘佇列任務數量
return
self.work_queue.qsize()
def wait_all_complete(self): #
等待所有執行緒執行完畢
for item in
self.threads:
if item.isalive(): #
判斷執行緒是否是活動狀態,如果是則等待執行緒執行結束
item.join()
class work(threading.thread): #
work類就是處理單個執行緒,它負責從佇列取出乙個執行緒,並將該執行緒執行完畢
def__init__(self, work_queue): #
初始化乙個工作執行緒,同時產生工作佇列,其中work_queue是workmanager類中初始化好的乙個queue.queue()
threading.thread.__init__(self) #
自動自行下邊的run方法
self.work_queue =work_queue
self.start()
def run(self): #
重寫run方法
#死迴圈,從而讓建立的執行緒在一定條件下關閉退出
while
true:
try:
do, args = self.work_queue.get(block=false) #
任務非同步出隊,queue內部實現了同步機制
#print('do:',do,'args:',args)
do(args) #
從佇列裡取出執行緒,並執行,do是函式物件,args是執行緒號
self.work_queue.task_done() #
通知系統單個任務完成
except
exception as e:
break
def do_job(args): #
具體要做的任務
time.sleep(2) #
模擬處理時間
print(threading.current_thread(), list(args)) #
列印當前執行緒物件,和引數列表
if__name__ == '
__main__':
start =time.time()
work_manager = workmanager(10, 3) #
或者work_manager = workmanager(10000, 20)
work_manager.wait_all_complete()
end =time.time()
print("
cost all time: %s
" % (end-start))
Python執行緒池實現
執行緒池 coding gb2312 created on apr 10,2014 author liyunfeng see 執行緒池模組 import queue import sys import threading from time import ctime class threadpool...
Python實現執行緒池
最近在做一些文字處理方面的事情,考慮到程式利用併發性可以提高執行效率 不糾結特殊反例 於是入圍的idea如使用多程序或多執行緒達到期望的目標,對於程序或執行緒的建立是有代價的,那麼我們是否可以實現乙個執行緒池來達到已建立的執行緒反覆使用從而使代價降低到最小呢?當然可以,要想建立乙個執行緒池,那麼必須...
python多執行緒執行緒池實現
在python中多執行緒可以使用threading來實現,但實際使用時考慮效能等,大多會使用到執行緒池,下面就是基於python2和python3來說明下執行緒池的使用。import time def testthread fl time.sleep 1 print print fl return ...