【发布时间】:2017-08-25 18:38:14
【问题描述】:
我创建了一个(相当大的)程序,需要很长时间才能完成,我开始寻找加快程序速度的方法。
我发现如果我在程序运行时打开任务管理器,只会使用一个内核。
经过一番研究,我发现了这个网站:
Why does multiprocessing use only a single core after I import numpy? 给出了os.system("taskset -p 0xff %d" % os.getpid()) 的解决方案,
但这对我不起作用,我的程序继续在单核上运行。
然后我发现了这个: is python capable of running on multiple cores?, 这指向使用多处理。
所以在研究了多处理之后,我看到了这部关于如何使用它的纪录片https://docs.python.org/3/library/multiprocessing.html#examples
我试过代码:
from multiprocessing import Process
def f(name):
print('hello', name)
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
a = input("Finished")
运行代码后(不在IDLE中)是这样说的:
Finished
hello bob
Finished
注意:在我第一次按回车时显示完成后
所以在这之后我现在更加困惑,我有两个问题
首先:它仍然不能运行多核(我有一个 8 核 Intel i7)
第二:为什么它甚至在运行if语句代码之前输入“Finished”(它甚至还没有完成!)
【问题讨论】:
-
是的,因为你只有一个进程,所以它只会使用一个核心。
-
另外,您使用的是
numpy吗?因为那个链接似乎不相关。 -
那么在 for 语句中必须执行大量乘法/减法的情况下,我将如何使用多个内核呢?例如
for each in range(1000): a = a*each -
您如何测试/验证在多核上运行的?
-
@juanpa.arrivillaga 不,我没有使用 numpy,但我说它在我的场景中不起作用
标签: python python-3.x multiprocessing