import threading
import queue
import time
'''
queue.qsize() 返回队列的大小
queue.empty() 如果队列为空,返回True,反之False
queue.full() 如果队列满了,返回True,反之False
queue.full 与 maxsize 大小对应
queue.get([block[, timeout]])获取队列,timeout等待时间
queue.get_nowait() 相当queue.get(False)
queue.put(item) 写入队列,timeout等待时间
queue.put_nowait(item) 相当queue.put(item, False)
queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
'''
class CustomThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
q_method, kwargs = self.__queue.get()
q_method(**kwargs)
self.__queue.task_done()
def start_thread(request_queue):
# 启动线程
for i in range(request_queue.maxsize):
t = CustomThread(request_queue)
t.setDaemon(True)
t.start()
def test(id):
print("test start by id:{}".format(id))
time.sleep(1)
print("test end by id:{}\n".format(id))
if __name__ == '__main__':
QUEUE_SIZE = 5
test_queue = queue.Queue(QUEUE_SIZE)
#启动线程
start_thread(test_queue)
# 启动线程
# for i in range(test_queue.maxsize):
# t = CustomThread(test_queue)
# t.setDaemon(True)
# t.start()
for i in range(5):
test_queue.put((test, {"id":i}))
#等待所有线程执行完
test_queue.join()
print("进程结束!")