(一)普通创建线程方法
def run(n):
'''线程要做的事情'''
time.sleep(2)
# 打印党庆线程的名字
print(threading.current_thread().name, n)
# 使用线程进行优化
def main_use_thread():
'''使用线程优化任务'''
# 假设资源有限,最多只能跑10个线程
t1 = time.time()
ls = []
for k in range(10):
for i in range(10):
t = threading.Thread(target=run, args=(i,))
ls.append(t)
t.start()
for j in ls:
j.join()
print(time.time() - t1)
if __name__ == '__main__':
main_use_thread()
发现运行完需要20秒的时间
(一)使用线程池方法创建
导入线程池的模块
from multiprocessing.dummy import Pool
def run(n):
'''线程要做的事情'''
time.sleep(2)
# 打印党庆线程的名字
print(threading.current_thread().name, n)
def main_use_pool():
t1 = time.time()
'''使用线程池优化'''
n_list = range(100)
pool = Pool(10)
pool.map(run,n_list)
pool.close()
pool.join()
print(time.time() - t1)
运行时间是24秒
(三)使用线程池方法创建第三种方法
导入模块
from concurrent.futures.thread import ThreadPoolExecutor
def run(n):
'''线程要做的事情'''
time.sleep(2)
# 打印党庆线程的名字
print(threading.current_thread().name, n)
def main_use_executor():
'''使用readPoolExecutor 来优化'''
# 没有阻塞主线程
t1 = time.time()
n_list = range(100)
executor = ThreadPoolExecutor(max_workers=10,)
executor.map(run, n_list)
print(time.time() - t1)
# 阻塞主线程 用with 语法
# t1 = time.time()
# n_list = range(100)
# with ThreadPoolExecutor(max_workers=10,) as executor:
# executor.map(run, n_list)
# print(time.time() - t1)
这里注意要用with 来为线程起一个别名,也可以阻塞主线程要不然测试不出来时间的