- from functools import partial
-
- from itertools import repeat
- import time
- import multiprocessing as mp
-
- def main_process(a):
-
- t1 = time.perf_counter()
- sum = 0
- for i in range(a):
- sum = sum+i
- print(sum)
-
- print(f'coast:{time.perf_counter() - t1:.8f}s' + ' total')
-
- if __name__ == "__main__":
-
- tt = time.perf_counter()
-
- # 多线程,把第一个循环变成一个list,也就是直接把参数给第二个for循环
- '''例如:我要处理100张图,处理程序为process.py,这个事情是可以同时进行的,
- 我只要把所有图片的名称作为一个list,用zip_args传给process.py即可,python就会同时对100张图进行process.py操作
- 如果几件事不能同时做,必须有顺序,那就不能多线程,就像不能同时吃饭和睡觉'''
- list1 = []
- for i in range(20):
- list1.append(100000000)
- print(list1)
- zip_args = list(zip(list1))
- with mp.Pool(24) as pool:
- pool.starmap(main_process, zip_args)
- pool.close()
- pool.join()
-
- # 不使用多线程
-
- # for i in range(20):
- # sum = 0
- # for j in range(100000000):
- # sum = sum + j
- # print(sum)
-
- print(f'coast:{time.perf_counter() - tt:.8f}s' + ' total')
结果:

我们可以看到,每一次1加到100000都要5秒,但是总时长才6秒,说明多线程同时进行运算了