我在 python 中有一个 kivy 应用程序,它使用了一些线程。
由于全局解释器锁,python 无法在不同的核心上运行这些线程,我本来想尝试使用 PyPy 并看看我是否可以使线程在不同的核心上运行得更快,因为 PyPy 是不同并提供 stackless (那是什么?:)。
有人有一些关于如何制作一个简单的 python 程序的信息要分享,它通过模块 threading
启动一些线程,与 pypy 解释器一起运行,以便它使用这个 stackless 功能?
最佳答案
Pypy 不会解决每次运行单线程的 Python 问题,因为它也使用了 GIL - http://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why
除此之外,Kivy 是一个嵌入 Python 本身的复杂项目——虽然我不太了解它,但我怀疑是否有可能将其中使用的 Python 切换为 Pypy。
根据您在做什么,您可能想要使用 multiprocessing
模块而不是 threading
- 它是一种替代品,可以对 Python 函数进行透明的进程间调用,因此可以利用多核。
https://docs.python.org/3/library/multiprocessing.html
这是 cPython 中的标准,并且可以在 Kivy 中使用,如果(且仅当)子进程中的所有代码只负责数字运算,等等,并且所有用户交互和显示更新都在主进程上进行.
关于Python 和线程与 PyPy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41449851/