#測試coding=utf-8
import
threading
import
queue
import
time
import
traceback
class
threadpoolexecutor(object):
def__init__
(self, max_works):
self._q = queue.queue()
self.max_works=max_works
self.started=0
defworker(self):
while
true:
(fn, args) =self._q.get()
try:
fn(*args)
except
exception, e:
'執行緒池執行錯誤,item是:
',item, '
錯誤原因是:
',e,traceback.format_exc()
finally
:
pass
self._q.task_done()
def submit(self, fn, *args):
item =(fn,args)
self._q.put(item)
self.start_work()
defstart_work(self):
if self.started==0:
for i in
range(self.max_works):
t=threading.thread(target=self.worker)
t.setdaemon(true)
###利用daemon的特性:父執行緒退出時子執行緒就自動退出。
t.start()
self.started=1
defwait_all_finish(self):
self._q.join()
#coding=utf8
import
threading
from xccfb import
threadpoolexecutor
import
time
if__name__=="
__main__":
tlock=threading.lock()
deffun(strx):
with tlock:
print time.strftime('
%h:%m:%s
'),strx
time.sleep(2)
threadpoolexecutor=threadpoolexecutor(3)
for i in range(10):
threadpoolexecutor.submit(fun,
'hello')
threadpoolexecutor.submit(fun, 'hi'
) threadpoolexecutor.wait_all_finish() ###注釋掉就可以先print over
使用wait_all_finish()的queue.join()方法阻塞主線程,當佇列中有任務還要執行時候不往下執行。不想阻塞就不要寫這句。
python 執行緒池 Python的執行緒池
usr bin env python coding utf 8 concurrent 用於執行緒池和程序池程式設計而且更加容易,在python3.2中才有。import sys from concurrent.futures import threadpoolexecutor,as complete...
python 執行緒池 python執行緒池原始碼解析
本篇主要講下threadpoolexecutor的實現。由於業務量不大,且一直使用框架進行程式設計,對執行緒的理解一直很模糊,基本處於不想阻塞程式執行,起乙個執行緒啟動任務的階段。總感覺自己好像會執行緒一樣,實則一直處於一種懵懂狀態,通過一段時間檢視一些別人寫的原始碼,終於有所悟,也記錄下自己的學習...
python執行緒池
import time threadpool為執行緒池模組 import threadpool deftest str print str time.sleep 2 if name main starttime time.time 建立執行緒池,最多建立的執行緒數為10 pool threadpoo...