1.multiprocessing.Pool用于多进程,multiprocessing.dummy.Pool用于多线程。多线程是假的并行,实际上还是串行。如果是计算占比比较大,用多进程;如果是I/O占比比较大,用多线程。

2.multiprocessing.Pool包含四个方法。其中:map、map_async用于同一个函数的多线程运行,参数可以用列表;apply、apply_async用于不同函数的多线程运行,但参数必须用元祖。其中,apply无法用于并行,实际运行效果是串行。

3.Pool可以不指定进程数量,可以实现动态的进程数量。如pool=Pool(5)可以用pool=Pool()代替。

4.如果是同一个函数的多进程并行,用如下代码:

1 from multiprocessing.dummy import Pool
2 pool = Pool()
3 my_fetchall = pool.map(func_name, paremeter_list)
4 pool.close()
5 pool.join()

5.如果是不同函数的多进程并行,用如下代码:

1 from multiprocessing import Pool
 2 # 并行的数据准备
 3 arg_tup = (my_date, dwmc)
 4 fun_list = [get_xtxl, get_dyhd, get_yjzhlyl, get_jbzq, get_tjl, get_gkhgl, get_phhgl]
 5 
 6 # 创建进程池
 7 pool = Pool()
 8 
 9 # 逐个塞入进程
10 pool_list = [pool.apply_async(item, arg_tup) for item in fun_list]
11 
12 # 关闭进程池
13 pool.close()
14 pool.join()
15 
16 # 逐个获取结果
17 [my_xtxl, my_dyhd, my_yjzhlyl, my_jbzq, my_tjl, my_gkhgl, my_phhgl] = [item.get() for item in pool_list]