python多处理不使用多核

python多处理不使用多核,python,Python,阅读文档: 我决定编写一个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:

阅读文档: 我决定编写一个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)
从日期时间导入日期时间
def钙纤维(ind):
fb=1
如果ind>=3:
prev=1
i=2
而我,
上一个tmp=fb
fb+=prev
prev=prev_tmp
i+=1
返回fb
def长钙纤维(ind):
val=0
对于范围(500)内的j:
val=钙纤维(ind)
返回值
如果名称=“\uuuuu main\uuuuuuuu”:
t1=datetime.now()
对于范围(10)内的i:
tmp=长计算纤维(10000)
t2=datetime.now()
打印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)
从日期时间导入日期时间
从multiprocessing.pool导入线程池
def钙纤维(ind):
fb=1
如果ind>=3:
prev=1
i=2
而我,
上一个tmp=fb
fb+=prev
prev=prev_tmp
i+=1
返回fb
def长钙纤维(ind):
val=0
对于范围(500)内的j:
val=钙纤维(ind)
返回值
如果名称=“\uuuuu main\uuuuuuuu”:
t1=datetime.now()
池=线程池(进程=10)
异步_结果=[]
对于范围(10)内的i:
async\u results.append(pool.apply\u async(long\u calc\u fib,(10000,))
对于异步_结果中的res:
tmp=res.get()
t2=datetime.now()
打印str(t2-t1)
我的错误。 我一定是用了Pool而不是ThreadPool。
通过改变线程池到线程池,我将时间缩短为3秒。

这是因为线程只是进程的一个子任务-如果要使用多个cpu核心,则需要额外的进程。