我在 python 中有一个使用一些线程的 kivy 应用程序。 由于全局解释器锁定,python无法在不同的核心上运行这些线程,我本来希望尝试使用 PyPy ,看看我是否可以让线程在不同的内核中运行得更快因为 PyPy 不同并提供无堆栈(这是什么?:)。
有人有一些信息要分享如何创建一个简单的python程序,它由模块threading
启动一些线程,与pypy解释器一起运行,使得它使用 stackless featuer?
答案 0 :(得分:2)
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中使用,如果(并且仅当)子进程中的所有代码都处理数字运算,依此类推,以及所有用户在主要流程上进行交互和显示更新。