Python多线程常用包对比

python由于本身的特质,不能实现真正的多核并行运算,但是有一些第三方库较好地模拟了在多核环境下的并行运算,例如pp包以及multiprocessing,那么哪种更能充分利用多核心呢?

这里我简单做下对比,首先放上结论:multiprocessing是最优秀的。

在实测过程中,我的CPU是4核8线程,multiprocessing能充分利用多核运算优势,使得每一颗CPU核心的负载基本相当,并且能够在8个进程核心上负载相当,总体上占满CPU性能,而pp包只能利用好4颗物理核心,对剩下的4个虚拟核心基本无视。

下面的示例代码,供大家运行参考:

import multiprocessing
import time
import pp

def func(N):
    sum = 0
    for i in xrange(N):
        sum += i
    return sum

if __name__ == "__main__":
    multiprocessing.freeze_support()

    start = time.clock()
    for i in xrange(200000):
        sum = func(10000)
    print ">> normal: ", time.clock()-start

    start = time.clock()
    pool = multiprocessing.Pool(processes=8)
    jobs = []
    for i in xrange(200000):
        jobs.append(pool.apply_async(func, (10000, )))
    pool.close()
    pool.join()
    print ">> multiprocessing: ", time.clock() - start

    start = time.clock()
    jobs = []
    job_server = pp.Server()
    job_server.set_ncpus(8)
    for i in xrange(200000):
        jobs.append(job_server.submit(func, (10000, )))
    job_server.wait()
    print ">> pp: ", time.clock() - start
    job_server.print_stats()

  

时间: 2024-10-26 04:06:00

Python多线程常用包对比的相关文章

python多线程和多进程对比

1.纯计算  多线程只用了一个cpu  45%左右  多进程用两个cpu  90%左右 # coding=utf-8 from multiprocessing import Pool # 多线程版本from multiprocessing.dummy import Pool  import sys, os import time def timetask(times): while 1: pass if __name__ == '__main__': startTime = time.time(

ubuntu下安装 python 常用包

用于科学计算的常用包: sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nosesudo apt-get install python-pip 包括,numpy, scipy, matplotlib, ipython, ipython-notebook, pandas, sympy, nose 安装

Python的常用库

读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都应该有它. Scrapy.如果你从事爬虫相关的工作,那么这个库也是必不可少的.用过它之后你就不会再想用别的同类库了. wxPython.Python的一个GUI(图形用户界面)工具.我主要用它替代tkinter.你一定会爱上它的. Pillow.它是PIL(Python图形库)的一个友好分支.对于用

python 多线程探索

前面已经了解过了,python多线程效率较低的主要原因是存在GIL,即Global Interpreter Lock(全局解释器锁).这里继续详细的看下GIL的说明与如何避免GIL的影响,从而提高python多线程的执行效率.什么是GIL首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码.有名的编译器例如GCC,INTEL C++,Visual C++等

繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包

OpenCC OpenCC 是跨平台.多语言的开放中文转换库,除了基本的简繁转换功能外,用户还可以选择对不同用词习惯和异体字的处理方式. OpenCC 还提供方便的网页转换界面. OpenOffice.Org的转换功能 OpenOffice.Org提供简繁功能,使用很方便(在工具->语言->中文简繁转换). Google翻译功能 Google翻译也可以做简繁转换,效果分析见后面. 使用cconv转换 cconv建立在iconv之上,增加了词语转换能力,效果分析见后面. Ubuntu用户可以用命

python多进程-----multiprocessing包

multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多线程并不能做到真正的并行处理,只能完成相对的并发处理,那么我们需要的就是python的多进程来完成并行处理,把所有的cpu资源都利用起来.multiprocessing的很大一部分与threading使用同一套API,只不过换到了多进程的环境.这里面要注意,对于多进程来说,win32平台和unix平

Python多线程多进程那些事儿看这篇就够了~~

自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块. 目录   0x01 进程 and 线程 and “GIL” 0x02 python多线程&&线程锁&&threading类 0x03 python队列代码实现 0x04 python之线程池实现 0x05 python多进程并行实现 0x01 进程 and 线程 and “

python多线程

http://blog.csdn.net/pipisorry/article/details/45306973 CPU-bound(计算密集型) 和I/O bound(I/O密集型) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高.CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Lo

python多线程、多进程以及GIL

多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调用start()方法,即开始运行该线程,该线程将执行函数func,当然,如果func需要参数,可以在Thread的构造函数中传入参数args=(-).示例代码如下 import threading #用于线程执行的函数 def counter(n): cnt = 0; for i in xrange