[英]python multiprocessing and number of cores
我有一个 mac ,它有 2 个物理内核和 4 个逻辑内核。 我想弄清楚 python multiprocessing 。 据我所知,处理中的每个进程都使用计算机的一个内核,所以我相信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个函数版本应该需要更长的时间,但事实并非如此。 我在这里遗漏了什么?
谢谢 !
您可以根据需要从 Python 脚本启动任意数量的进程,操作系统调度程序将安排它们在您的 CPU 内核上运行。 如果这些进程受 CPU 限制,那么通过启动比内核更多的进程,您将无法获得更好的性能。 但是在您的示例中,进程大部分时间都在休眠,因此它们不会竞争内核,这就是为什么 8 个进程可以与 4 个进程同时运行的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.