以前说过Python的多线程只能运行在一个单核上,也就是各线程是以并发的方式异步执行的python
这篇文章咱们来聊聊Python多进程的方式编程
多进程依赖于所在机器的处理器个数,在多核机器上进行多进程编程时,各核上运行的进程之间是并行执行的,能够利用进程池,是每个内核上运行一个进程,当翅中的进程数量大于内核总数时,待运行的进程会等待,直至其余进程运行完毕让出内核网络
多进程就至关于下面这种卖票的行为多线程
在这里要注意,当系统内只有一个单核CPU是,多进程并不会发生,此时各进程会依次占用CPU运行至完成并发
咱们能够经过Python的语句会的CPU可用的核数,以下图app
为了造成比较,咱们仍是使用以前的那个例子,当当图书,搜索关键字商品信息的抓取异步
首先写出多进程主方法async
# coding=utf-8 __Author__ = "susmote" from multi_threading import mining_func import multiprocessing import time def multiple_process_test(): start_time = time.time() page_range_list = [ (1, 10), (11, 20), (21, 32), ] pool = multiprocessing.Pool(processes=3) for page_range in page_range_list: pool.apply_async(mining_func.get_urls_in_pages, (page_range[0], page_range[1])) pool.close() pool.join() end_time = time.time() print("抓取时间:", end_time - start_time) return end_time - start_time
在这里面,我简单解释一下有关多进程的操做函数
pool被定义为可同时并行3个进程的进程池,而后经过循环,使用apply_async方法使进入进程池的进程以异步的方式并行运行url
下面是主函数
# coding=utf-8 __Author__ = "susmote" from process_func import multiple_process_test if __name__ == "__main__": pt = multiple_process_test() print("pt : ", pt)
把代码运行起来,获得以下结果
5.908
再运行一次
3.954
最后一次
4.163
取平均时间
4.341秒
这时咱们再回顾上篇文章多线程的状况(一样网络条件下):
多线程
单线程
能够看到,差距很是明显,多进程占绝大优点
多进程就是这些,你也能够找一个更大的数据池,去试验这些方法