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秒,说明多线程同时进行运算了