python 如何充分利用多核
How to fully take advantage of multi-cores by python
我用 python 在 Ubuntu
上执行了这个程序
import thread
import time
# Define a function for the thread
def print_time( threadName, delay):
count = 0
while True:
count += 1
# Create two threads as follows
try:
for index in xrange(1,50000):
thread.start_new_thread( print_time, ("Thread-" + str(index), 0, ) )
except:
print "Error: unable to start thread"
while 1:
pass
我希望所有 8 个内核都使用 100%,但是通过系统监视器我只得到前 4 个内核的 50% 使用率和最后 4 个内核的 25% 使用率。
我怎样才能使所有 8 个内核都达到 python 的 100% 使用率?
像这样的事情会让你开始。您需要调整 num_processes
以匹配您的硬件。
import multiprocessing as mp
import time
def slow_func():
while True:
for i in xrange(99999):
j = i*i
def main():
num_processes = 4
for _ in range(num_processes):
process = mp.Process(target = slow_func)
process.daemon = True
process.start()
while True:
time.sleep(1)
if __name__ == '__main__':
main()
编辑: 这对我来说适用于 Windows 4 核,并提供 4x 25% 的处理器使用率。
要与线程模块进行比较,您可以 import threading
并将行 process = mp.Process(target = slow_func)
替换为 process = threading.Thread(target = slow_func)
。您应该会发现它只使用了您的一个内核。
我用 python 在 Ubuntu
上执行了这个程序import thread
import time
# Define a function for the thread
def print_time( threadName, delay):
count = 0
while True:
count += 1
# Create two threads as follows
try:
for index in xrange(1,50000):
thread.start_new_thread( print_time, ("Thread-" + str(index), 0, ) )
except:
print "Error: unable to start thread"
while 1:
pass
我希望所有 8 个内核都使用 100%,但是通过系统监视器我只得到前 4 个内核的 50% 使用率和最后 4 个内核的 25% 使用率。 我怎样才能使所有 8 个内核都达到 python 的 100% 使用率?
像这样的事情会让你开始。您需要调整 num_processes
以匹配您的硬件。
import multiprocessing as mp
import time
def slow_func():
while True:
for i in xrange(99999):
j = i*i
def main():
num_processes = 4
for _ in range(num_processes):
process = mp.Process(target = slow_func)
process.daemon = True
process.start()
while True:
time.sleep(1)
if __name__ == '__main__':
main()
编辑: 这对我来说适用于 Windows 4 核,并提供 4x 25% 的处理器使用率。
要与线程模块进行比较,您可以 import threading
并将行 process = mp.Process(target = slow_func)
替换为 process = threading.Thread(target = slow_func)
。您应该会发现它只使用了您的一个内核。