循环执行一个线程
# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2018/7/20 0020 5:35
import threading
import queue
import timeclass my_th(threading.Thread): def __init__(self):
super().__init__()
self.daemon = True # 守护模型(主线程结束,所有子线程结束)
self.queue = queue.Queue() def run(self):
while True:
fun = self.queue.get() # 得到函数对象,
fun() # 运行函数
self.queue.task_done()
# 队列中有任务,会不断的依次运行, def appy(self,fun): # 添加任务
self.queue.put(fun) def join(self, timeout=None): # 重写 join 方法
self.queue.join() # 把队列的 join 方法写在里边
# 当队列任务执行完毕就结,def fun_1():
time.sleep(2)
print('aaaa')t = my_th()
t.start()
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)t.join() # 这里的 join 不是等待线程,而是等待队列任务执行完# 始终只有一个线程在运行,
上边是任务有多个,但线程池中只有一个线程,2秒打印一个,
自定义线程池
# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2018/7/20 0020 5:35
import threading
import queue
import timeclass my_th(threading.Thread): def __init__(self,num):
super().__init__()
self.queue = queue.Queue()
for i in range(1,num+1):
t = threading.Thread(target=self.run, name='thread_{}'.format(i))
t.daemon = True
t.start() def run(self):
while True:
fun = self.queue.get() # 得到函数对象,
fun() # 运行函数
self.queue.task_done()
# 队列中有任务,会不断的依次运行, def appy(self,fun): # 添加任务
self.queue.put(fun) def join(self, timeout=None): # 重写 join 方法
self.queue.join() # 把队列的 join 方法写在里边
# 当队列任务执行完毕就结,def fun_1():
time.sleep(2)
print('aaaa')t = my_th(5) # () 创建线程个数,
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)
t.appy(fun_1)t.join() # 这里的 join 不是等待线程,而是等待队列任务执行完
进程池
# import multiprocessing
# from multiprocessing import Pool # py自带的进程池
import time
from multiprocessing.dummy import Pool # 线程池
from multiprocessing.pool import ThreadPool # 线程池pool = Pool(4) # 实例池,他的大小默认是 cpu 核心个数def func(i):
print('..............',i)
time.sleep(0.1)if __name__ == '__main__':
for i in range(10):
pool.apply_async(func=func,args=(i,)) # 向池提交任务 # pool.map(func,range(5)) # 与 pool.apply_async pool.close() # 关闭池
pool.join() # 等待任务完毕
# pool.terminate()
如果池中有返回值:
# import multiprocessing
# from multiprocessing import Pool # py自带的进程池
import time
from multiprocessing.dummy import Pool # 线程池
from multiprocessing.pool import ThreadPool # 线程池pool = Pool(4) # 实例池,他的大小默认是 cpu 核心个数def func(i):
print('..............',i)
time.sleep(0.1)
return iif __name__ == '__main__':
a = []
for i in range(10):
p = pool.apply_async(func=func,args=(i,)) # 向池提交任务
a.append(p.get()) # pool.map(func,range(5)) # 与 pool.apply_async pool.close() # 关闭池
pool.join() # 等待任务完毕
for i in a:
print(i) # pool.terminate()