實現**:
#coding:utf-8
import queue
import threading
import sys
import time
import urllib
#替我們工作的執行緒池中的執行緒
class mythread(threading.thread):
def __init__(self, workqueue, resultqueue,timeout=30, **kwargs):
threading.thread.__init__(self, kwargs=kwargs)
#執行緒在結束前等待任務佇列多長時間
self.timeout = timeout
self.setdaemon(true)
self.workqueue = workqueue
self.resultqueue = resultqueue
self.start()
def run(self):
while true:
try:
#從工作佇列中獲取乙個任務
callable, args, kwargs = self.workqueue.get(timeout=self.timeout)
#我們要執行的任務
res = callable(args, kwargs)
#報任務返回的結果放在結果佇列中
self.resultqueue.put(res+" | "+self.getname())
except queue.empty: #任務佇列空的時候結束此執行緒
break
except :
print sys.exc_info()
raise
class threadpool:
def __init__( self, num_of_threads=10):
self.workqueue = queue.queue()
self.resultqueue = queue.queue()
self.threads =
self.__createthreadpool( num_of_threads )
def __createthreadpool( self, num_of_threads ):
for i in range( num_of_threads ):
thread = mythread( self.workqueue, self.resultqueue )
def wait_for_complete(self):
#等待所有執行緒完成。
while len(self.threads):
thread = self.threads.pop()
#等待執行緒結束
if thread.isalive():#判斷執行緒是否還存活來決定是否呼叫join
thread.join()
def add_job( self, callable, *args, **kwargs ):
self.workqueue.put( (callable,args,kwargs) )
def test_job(id, sleep = 0.001 ):
html = ""
try:
time.sleep(1)
conn = urllib.urlopen('')
html = conn.read(20)
except:
print sys.exc_info()
return html
def test():
print 'start testing'
tp = threadpool(10)
for i in range(50):
time.sleep(0.2)
tp.add_job( test_job, i, i*0.001 )
tp.wait_for_complete()
#處理結果
print 'result queue\'s length == %d '% tp.resultqueue.qsize()
while tp.resultqueue.qsize():
print tp.resultqueue.get()
print 'end testing'
if __name__ == '__main__':
test()
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實現執行緒池
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是...