在Python中有类似于Java的Thread.yield()的东西吗?这甚至有意义吗?

Car*_*los 8 python multithreading sleep yield

我想告诉我的Python线程屈服,因此避免不必要地占用CPU.在Java中,您可以使用该Thread.yield()函数执行此操作.我不认为Python中有类似的东西,所以我一直在使用time.sleep(t)where t = 0.00001.因为t=0似乎没有效果.

我想也许有些东西我对Python的线程模型没有正确理解,因此缺少原因thread.yield().有人可以向我澄清这个吗?谢谢!

PS:这是Java的文档Thread.yield()所说的:

导致当前正在执行的线程对象暂时暂停并允许其他线程执行.

Ric*_*ler 10

Dup:如何使用线程.线程在Python中产生其余的量子?.

time.sleep(0)
Run Code Online (Sandbox Code Playgroud)

  • 我的问题是 `time.sleep(0)` 似乎没有任何效果。谢谢参考。 (2认同)

Kyl*_*tan 5

无论如何,解释器都会定期从一个线程切换到另一个线程,而无需您的干预 - 您不需要告诉系统不要“占用”线程。

然而,正常情况下,任一时刻只有一个Python线程在执行。(异常往往发生在线程等待来自外部设备(例如硬盘或网络)的输入时。)这是由于全局解释器锁造成的。然而,这确实意味着您可能无法像在 Java 或许多其他语言中那样从 Python 中的线程中获得那么多好处。解决这个问题并不一定是微不足道的,尽管如果可能的话,转向多处理而不是多线程是一种好方法。

然而,您想要做的事情在某种意义上似乎是有缺陷的 - 如果您有 2 个线程并且它们都有工作要做,那么您不必编写应用程序端代码来在它们之间切换。这是操作系统或虚拟机的工作。如果您发现自己告诉一个线程“少做一些事情”,因为您想在处理器时间方面有利于另一个线程,那么您可能应该设置线程优先级,而不是添加任意的让步或休眠。(尽管如此,考虑到全局解释器锁的存在,这在 Python 中可能没有多大意义。)