python打造執行緒池

2021-09-07 15:07:06 字數 1924 閱讀 8704

#

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:

print

'執行緒池執行錯誤,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...