【发布时间】:2010-12-20 17:02:58
【问题描述】:
是否有任何简单的方法可以制作 2 个方法,比如 MethodA() 和 MethodB() 在 2 个不同的内核中运行?我不是说2个不同的线程。我在 Windows 中运行,但我想知道是否可以独立于平台。
编辑:然后呢
http://docs.python.org/dev/library/multiprocessing.html 和 parallel python?
【问题讨论】:
是否有任何简单的方法可以制作 2 个方法,比如 MethodA() 和 MethodB() 在 2 个不同的内核中运行?我不是说2个不同的线程。我在 Windows 中运行,但我想知道是否可以独立于平台。
编辑:然后呢
http://docs.python.org/dev/library/multiprocessing.html 和 parallel python?
【问题讨论】:
您必须使用单独的进程(因为经常提到的 GIL)。 multiprocessing module 随时为您提供帮助。
from multiprocessing import Process
from somewhere import A, B
if __name__ == '__main__':
procs = [ Process(target=t) for t in (A,B) ]
for p in procs:
p.start()
for p in procs:
p.join()
【讨论】:
假设您使用 CPython(参考实现),答案是 NO,因为 Global Interpreter Lock。在 CPython 中,线程主要用于有大量 IO 要做的时候(一个线程等待,另一个线程进行计算)。
【讨论】:
一般来说,运行不同的线程是在多核上运行的最佳可移植方式。当然,在 Python 中,全局解释器锁使这成为一个争论点——一次只有一个线程会取得进展。
【讨论】: