# !/usr/bin/env python
# -*- coding:utf-8 -*-
# ref_blog:
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 check_queue(self):
return self.work_queue.qsize()
"""等待所有執行緒執行完畢
"""
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 exception,e:
print str(e)
break
#具體要做的任務
def do_job(args):
print args
time.sleep(0.1)#模擬處理時間
print threading.current_thread(), list(args)
if __name__ == '__main__':
start = time.time()
work_manager = workmanager(10, 2)#或者work_manager = workmanager(10000, 20)
work_manager.wait_allcomplete()
end = time.time()
print "cost all time: %s" % (end-start)
python 中線程池的使用
python中已經有了threading模組,為什麼還需要執行緒池呢,執行緒池又是什麼東西呢?在介紹執行緒同步的訊號量機制的時候,舉得例子是爬蟲的例子,需要控制同時爬取的執行緒數,例子中建立了20個執行緒,而同時只允許3個執行緒在執行,但是20個執行緒都需要建立和銷毀,執行緒的建立是需要消耗系統資源...
c 中線程池
只有乙個前台執行緒在執行,應用程式的程序就在執行,如果多個前台執行緒在執行,但是main方法結束了,應用程式的程序任然是執行的,指導所有的前台執行緒完成其任務為止。在預設情況下,用thread建立的執行緒都是前台執行緒,執行緒池中的執行緒總是後台執行緒。在用thread類建立執行緒的時候,可以設定i...
Java中線程池的使用
1 threadpoolexecutor類構造器可以設定的引數 核心執行緒數 如果執行緒池中的執行緒數小於核心執行緒數,當新任務提交時,會新建乙個執行緒去處理該任務。最大執行緒數 如果執行緒池中的執行緒數大於等於核心執行緒數,但是小於最大執行緒數,當新任務提交時,會將任務加入任務佇列,如果任務佇列已...