Java和Python中的线程

6 投票
6 回答
2748 浏览
提问于 2025-04-15 12:08

我有几个关于Python和Java中线程的问题...

  1. 在Python中可以像在Java中那样给线程设置优先级吗?
  2. 我该如何在Python中结束、停止、挂起和中断线程?
  3. 线程组到底是干什么用的?Python也支持线程组吗?
  4. 同步 - 在Java中我们可以简单地用关键字synchronized来处理方法、对象……那在Python中呢?

谢谢!

6 个回答

1

这里有一个例子,展示了我如何让我的线程可以被暂停(其实这个方法主要适用于循环中的线程,除非你想在每一行前面都加一个“self.alive”的判断):

import threading, Queue

class HaltableThread(object.Thread):
    def __init__(self):
        self.stringQueue = Queue.Queue()
        self.alive = True
    def run(self):
        while self.alive:
            try:
                data = self.stringQueue.read(0.01) #100ms block until data
            except Queue.Empty:
                pass
            else:
                print data
    def stop(self):
        self.alive = False
1

在普通的Java中,线程的优先级并不总是可靠的。你可能会发现一个优先级较低的线程在运行,而一个优先级较高的线程却在等待。

有一种叫做“实时Java”的东西(可以查看 http://www.rtsj.org),它确实会强制执行线程的优先级,至少对于RealtimeThread类来说是这样。不过,普通的java.lang.Thread可能仍然无法真正按照优先级来排序。

12

假设我们在讨论经典的(CPython)实现:

  1. 首先,Python 的线程没有优先级。
  2. 你不能对 Python 中的线程做任何这些事情。
  3. Python 中没有线程组。
  4. 你可以使用很多方法,比如锁,但一般推荐使用标准库中的 Queue 模块(并且限制你的线程交互在 Queue 允许的范围内)。

换句话说,Python 的线程功能远不如 Java 的线程丰富——更不用说每个进程实际上只能运行一个线程的 Python 代码(其他线程可能在运行 C 代码或在等待)。

如果你需要更复杂的功能,也就是超出 Python 限制的线程能力,建议你使用标准库中的 multiprocessing 模块——或者切换到一些允许你使用更丰富线程方法的 Python 实现,比如适用于 JVM 的 Jython 或适用于 .NET 的 IronPython。

撰写回答