主要思路:
任务获取和执行:
1、任务加入队列,等待线程来获取并执行。
2、按需生成线程,每个线程循环取任务。
线程销毁:
1、获取任务是终止符时,线程停止。
2、线程池close()时,向任务队列加入和已生成线程等量的终止符。
3、线程池terminate()时,设置线程下次任务取到为终止符。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# author: "Dev-L"
# file: 自己实现线程池.py
# Time: 2018/8/13 9:39
import threading
import contextlib
from queue import Queue
import time
class ThreadPool(object):
def __init__(self, max_num):
self.StopEvent = 0 # 线程任务终止符,当线程从队列获取到StopEvent时,代表此线程可以销毁。可设置为任意与任务有区别的值。
self.q = Queue()
self.max_num = max_num # 最大线程数
self.terminal = False # 是否设置线程池强制终止
self.created_list = [] # 已创建线程的线程列表
self.free_list = [] # 空闲线程的线程列表
self.Deamon = False # 线程是否是后台线程
def run(self, func, args, callback=None):