在 python 上的不同内核上运行方法
有没有简单的方法可以使 2 个方法(例如 MethodA() 和 MethodB())在 2 个不同的内核中运行?我的意思不是两个不同的线程。我在 Windows 中运行,但我想知道是否可以独立于平台。
编辑:那么
http://docs.python.org/dev/library/multiprocessing .html 和 并行 python ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您必须使用单独的进程(因为经常提到的 GIL)。 多处理模块可以为您提供帮助。
You have to use separate processes (because of the often-mentioned GIL). The multiprocessing module is here to help.
假设您使用 CPython(参考实现),答案是 NO,因为 Global解释器锁。在 CPython 中,线程主要在有大量 IO 要做时使用(一个线程等待,另一个线程执行计算)。
Assuming you use CPython (the reference implementation) the answer is NO because of the Global Interpreter Lock. In CPython threads are mainly used when there is much IO to do (one thread waits, another does computation).
一般来说,运行不同的线程是在多核上运行的最佳可移植方式。当然,在 Python 中,全局解释器锁使这一点变得毫无意义——一次只有一个线程会取得进展。
In general, running different threads is the best portable way to run on multiple cores. Of course, in Python, the global interpreter lock makes this a moot point -- only one thread will make progress at a time.
由于全局解释器锁的存在,Python 程序一次只能运行一个线程。如果您想要真正的多核 Python 编程,您可以查看 Jython (它可以访问 JVM 的线程),或者出色的 stackless,它有 Go 式的通道和 tasklet。
Because of the global interpreter lock, Python programs only ever run one thread at a time. If you want true multicore Python programming, you could look into Jython (which has access to the JVM's threads), or the brilliant stackless, which has Go-like channels and tasklets.