我遇到多处理问题,要使用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
完成
所以,我的问题是我如何使用多个内核并行执行代码?
答案 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")