python多处理不使用多个核心

时间:2015-04-12 21:31:45

标签: python

阅读文档:https://docs.python.org/2/library/multiprocessing.html 我决定编写一个cpu密集代码,并将多处理与串行计算进行比较。 首先,如果这个库使用多处理,那为什么我只看到1个python.exe进程? 其次,为什么串行计算需要12秒而多处理计算需要22秒?

序列号:

from datetime import datetime

def calc_fib(ind):
    fb = 1
    if ind >= 3:
        prev = 1
        i = 2
        while i < ind:
            prev_tmp = fb
            fb += prev
            prev = prev_tmp
            i += 1
    return fb


def long_calc_fib(ind):
    val = 0
    for j in range(500):
        val = calc_fib(ind)
    return val

if __name__ == "__main__":
    t1 = datetime.now()
    for i in range(10):
        tmp = long_calc_fib(10000)
    t2 = datetime.now()
    print str(t2 - t1)

多处理池代码:

from datetime import datetime
from multiprocessing.pool import ThreadPool

def calc_fib(ind):
    fb = 1
    if ind >= 3:
        prev = 1
        i = 2
        while i < ind:
            prev_tmp = fb
            fb += prev
            prev = prev_tmp
            i += 1
    return fb


def long_calc_fib(ind):
    val = 0
    for j in range(500):
        val = calc_fib(ind)
    return val


if __name__ == "__main__":
    t1 = datetime.now()

    pool = ThreadPool(processes=10)
    async_results = []
    for i in range(10):
        async_results.append(pool.apply_async(long_calc_fib, (10000,)))
    for res in async_results:
        tmp = res.get()

    t2 = datetime.now()
    print str(t2 - t1)

1 个答案:

答案 0 :(得分:0)

我的错误。 我必须使用Pool而不是ThreadPool。 通过将ThreadPool更改为Pool,我将时间缩短为3秒。