【问题标题】:Python and Threads with PyPy?Python 和 PyPy 的线程?
【发布时间】:2017-01-03 18:14:06
【问题描述】:

我在 python 中有一个 kivy 应用程序,它使用了一些线程。 由于全局解释器锁,python 无法在不同的核心上运行这些线程,我想尝试使用 PyPy 看看我是否可以让不同核心的线程运行得更快因为 PyPy 是不同的并且提供 stackless(那是什么?:)。

有没有人分享一些关于如何制作一个简单的 python 程序的信息,该程序通过模块threading 启动一些线程,使用 pypy 解释器运行,以便它使用这个 stackless 功能?

【问题讨论】:

  • @noɥʇʎԀʎzɐɹƆ:赏金描述太宽泛了。请不要使用赏金来劫持其他问题并扩大其范围。
  • 无堆栈线程是一种绿色线程,它们不支持 SMP。它们更像是解释器拥有自己的调度程序并自行调度线程。但从操作系统的角度来看,这仍然是一个进程。要使用 SMP,您需要使用多处理或使用 C 或 Cython 或类似的本地线程。

标签: python multithreading pypy


【解决方案1】:

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 中使用,如果(且仅当)子进程中的所有代码都只处理数字运算,等等,所有用户在主进程上进行交互和显示更新。

【讨论】:

  • jeah,我目前正在尝试使用多处理工具实现,这有点糟糕,因为进行通信意味着我需要通信很多东西,以前是共享内存 =), python在这方面真的很烂,我最近才听说GIL
  • 使用共享内存与线程通信最终会咬你...使用队列。 python的队列对象很好用。
  • 我同意当主题是共享内存并行化 python 很烂,我喜欢 python。你可以使用 Cython 或 C 和 pthreads 来实现这一点,同时仍然有一个 python 接口。
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多