在 python 上的不同内核上运行方法

发布于 2024-08-12 18:01:08 字数 387 浏览 5 评论 0 原文

有没有简单的方法可以使 2 个方法(例如 MethodA() 和 MethodB())在 2 个不同的内核中运行?我的意思不是两个不同的线程。我在 Windows 中运行,但我想知道是否可以独立于平台。

编辑:那么

http://docs.python.org/dev/library/multiprocessing .html并行 python

Is there any easy way to make 2 methods, let's say MethodA() and MethodB() run in 2 different cores? I don't mean 2 different threads. I'm running in Windows, but I'd like to know if it is possible to be platform independent.

edit: And what about

http://docs.python.org/dev/library/multiprocessing.html
and
parallel python ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

许你一世情深 2024-08-19 18:01:08

您必须使用单独的进程(因为经常提到的 GIL)。 多处理模块可以为您提供帮助。

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()

You have to use separate processes (because of the often-mentioned GIL). The multiprocessing module is here to help.

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()
吻安 2024-08-19 18:01:08

假设您使用 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).

弥枳 2024-08-19 18:01:08

一般来说,运行不同的线程是在多核上运行的最佳可移植方式。当然,在 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.

箹锭⒈辈孓 2024-08-19 18:01:08

由于全局解释器锁的存在,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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文