"""
复习:  进程池,
            1. p = Pool(cpu个数+1), 一般
            2. ret = map(func, iterable) ;
                # 异步, 自带close()和join()
                # 返回值ret 是所有返回值组成的列表
            3. ret = apply(func, args=(元组,))
                # 同步; func函数执行完之后,才会继续执行之后的代码段
                # 每次执行的返回值 就是ret; 执行了多少遍需返回值的函数,就有多少个返回值
            4. ret = apply_async(func, args=(元组,))
                # 异步, 当func被子进程开启执行后,程序会继续向下执行
                # 返回值是 apply_async 的返回对象,  该对象有 .get()方法,可获取其返回值
                                                        # 这个get()会阻塞,直至对应的func执行完毕,获取到返回值
                # 使用apply_async给进程池分配任务,需 close() 和 join() 来保持多进程和主进程同步

回调函数实例
        ---- 把一个函数的返回值作为参数，执行另一个函数(在主进程执行)
        ---- 爬虫中有较多应用. 主程序处理数据, 多个子进程访问网站,下载

"""

