首先需要看下pool.imap() API
imap(func, iterable, chunksize=0)
进程池中的该方法会将 iterable
参数传入的可迭代对象分成 chunksize
份传递给不同的进程来处理。该方法会返回一个迭代器,通过 next
方法逐步拿到其运行结果
from multiprocessing import Pool
from multiprocessing import cpu_count
import math
import os
from tqdm import tqdm
def worker(n):
print(f'=======进程{os.getpid()}开始执行=======')
a = 0
for i in range(n * 10000000):
a += math.pow(n, 2)
print(f'=======进程{os.getpid()}执行结束=======')
return a
if __name__ == '__main__':
pool = Pool(cpu_count())
deals = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
# for deal in tqdm(deals):
# pool.apply_async(worker, args=(deal,))
# pool.close()
# pool.join()
list(tqdm(pool.imap(worker, deals), total=len(deals)))
pool.close()
pool.join()
感觉确实没啥用、