一、自定义线程池
#!/usr/bin/env python
# encoding: utf-8
"""
@author: wanwei
@license: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@contact: wei_wan@sui.com
@software: pycharm
@file: threadpool_demo.py
@time: 2019/5/14 15:28
@desc:
原理
1.创建线程池
2.将任务扔进去
3.关闭线程池
4.等待线程任务执行完毕
"""
from multiprocessing.pool import ThreadPool
import time
pool = ThreadPool(2)
def task1():
time.sleep(2)
print('task1 over...........')
def task2(*args, **kwargs):
time.sleep(3)
print('task2 over...........', args, kwargs)
# 将任务丢进线程池
pool.apply_async(task1)
pool.apply_async(task2,args=[1,2,3],kwds={'asd': 2})
pool.apply_async(task2,args=[1],kwds={'asd': 2,'sdfsd': 12231})
print('task submitted')
# 要点close必须在join之前,不允许再提交任务了
pool.close()
pool.join()
print('mission complete')
二、python内置线程池
#!/usr/bin/env python
# encoding: utf-8
"""
@author: wanwei
@license: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@contact: wei_wan@sui.com
@software: pycharm
@file: MyThreadPool.py
@time: 2019/5/14 17:09
@desc:
"""
import queue
import time
import threading
RUN = 0
CLOSE = 1
TERMINATE = 2
class MyThreadPool:
def __init__(self, n):
self.queue_obj = queue.Queue()
for i in range(n):
threading.Thread(target=self.worker, daemon=True).start()
def worker(self):
while True:
func = self.queue_obj.get("func")
args = self.queue_obj.get("args")
kwargs = self.queue_obj.get("kwargs")
if args or kwargs:
func(args, kwargs)
else:
func()
self.queue_obj.task_done()
# if self.queue_obj._state == CLOSE:
# break
def apply_async(self, func, args=(), kwargs={}):
# self.args = args
# self.kwargs = kwargs
self.queue_obj.put(func)
self.queue_obj.put(args)
self.queue_obj.put(kwargs)
def join(self):
self.queue_obj.join()
def task1():
time.sleep(2)
print('task1 over...........')
def task2(*args, **kwargs):
time.sleep(3)
print('task2 over...........', args, kwargs)
pool = MyThreadPool(2)
# 将任务丢进线程池
pool.apply_async(task1)
pool.apply_async(task2, args=[1,2,3], kwargs={'asd': 2})
pool.apply_async(task2, args=[1], kwargs={'asd': 2, 'sdfsd': 12231})
print('task submitted')
pool.join()
print('mission complete')