Python多处理不使用超过1个核心

时间:2018-03-28 17:49:05

标签: python multiprocessing

我遇到多处理问题,要使用1个以上的核心。我没有使用.join()等待上一个过程完成,我有一个4核的CPU,我仍然不知道为什么这个代码只使用%20的CPU,它应该使用超过%50。

import multiprocessing
import time
def f(x,y):
    global StartTime
    for ord1 in range(x):
        x *= 2
    print(y, time.time()-StartTime)

if __name__ == "__main__":
    input1 = 500000
    StartTime = time.time()
    p1 = multiprocessing.Process(target=f(input1,1))
    p2 = multiprocessing.Process(target=f(input1,2))
    p3 = multiprocessing.Process(target=f(input1,3))
    p4 = multiprocessing.Process(target=f(input1,4))
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    print("Done")

我想程序逐个执行它们而不是从输出中并行判断:

  

1 5.373946189880371

     

2 10.663974285125732

     

3 15.902992725372314

     

4 21.29733967781067

     

完成

所以,我的问题是我如何使用多个内核并行执行代码?

1 个答案:

答案 0 :(得分:2)

启动流程时,您需要通过args向目标函数提供参数。见https://docs.python.org/3/library/multiprocessing.html#the-process-class。否则,f(input1, 1)将在主进程中计算,而不是在工作程序中计算。

你的主要例程应该是:

if __name__ == "__main__":
    input1 = 500000
    StartTime = time.time()
    p1 = multiprocessing.Process(target=f, args=(input1,1))
    p2 = multiprocessing.Process(target=f, args=(input1,2))
    p3 = multiprocessing.Process(target=f, args=(input1,3))
    p4 = multiprocessing.Process(target=f, args=(input1,4))
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    print("Done")