Python中線程池的實現

2021-06-22 08:18:36 字數 1834 閱讀 2660

# !/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類構造器可以設定的引數 核心執行緒數 如果執行緒池中的執行緒數小於核心執行緒數,當新任務提交時,會新建乙個執行緒去處理該任務。最大執行緒數 如果執行緒池中的執行緒數大於等於核心執行緒數,但是小於最大執行緒數,當新任務提交時,會將任務加入任務佇列,如果任務佇列已...