我有一台mac,它有2个物理内核和4个逻辑内核。我想弄清楚python多处理。 据我所知,处理过程中的每个进程都使用计算机中的一个核心,所以我相信python脚本中的进程数不能超过计算机核心的数量。它是否正确 ?
但是如果我执行以下代码(它有8个函数),它会与具有4个函数的版本同时运行。
from multiprocessing import Process
import time
def func1():
for i in range(0,500):
print "11111"
time.sleep(0.1)
def func2():
for i in range(500,1000):
print "22222"
time.sleep(0.1)
def func3():
for i in range(1000,1500):
print "33333"
time.sleep(0.1)
def func4():
for i in range(1500,2000):
print "444444"
time.sleep(0.1)
def func5():
for i in range(2000,2500):
print "555555"
time.sleep(0.1)
def func6():
for i in range(2500,3000):
print "666666666"
time.sleep(0.1)
def func7():
for i in range(3500,4000):
print "7777777777"
time.sleep(0.1)
def func8():
for i in range(4500,5000):
print "8888888888 "
time.sleep(0.1)
if __name__=='__main__':
start_time = time.time()
p1 = Process(target = func1)
p1.start()
p2 = Process(target = func2)
p2.start()
p3 = Process(target = func3)
p3.start()
p4 = Process(target = func4)
p4.start()
p5 = Process(target = func5)
p5.start()
p6 = Process(target = func6)
p6.start()
p7 = Process(target = func7)
p7.start()
p8 = Process(target = func8)
p8.start()
p1.join()
p2.join()
p3.join()
p4.join()
p5.join()
p6.join()
p7.join()
p8.join()
print "done"
print("--- %s seconds ---" % (time.time() - start_time))
如果我使用4个函数或8个函数运行此代码,则执行时间相同,但核心数为4,因此我认为8个函数版本应该花费更长时间,但事实并非如此。我在这里遗失了什么?
谢谢!
答案 0 :(得分:1)
您可以根据需要从Python脚本启动任意数量的进程,操作系统调度程序将安排它们在CPU内核上运行。如果这些进程受CPU限制,那么通过启动比核心更多的进程,您将无法获得更好的性能。但是在你的例子中,这些进程大部分时间都处于休眠状态,因此他们没有竞争核心,这就是为什么8个进程可以在4个进程中同时运行的原因。