Java和Python中的线程
我有几个关于Python和Java中线程的问题...
- 在Python中可以像在Java中那样给线程设置优先级吗?
- 我该如何在Python中结束、停止、挂起和中断线程?
- 线程组到底是干什么用的?Python也支持线程组吗?
- 同步 - 在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)实现:
- 首先,Python 的线程没有优先级。
- 你不能对 Python 中的线程做任何这些事情。
- Python 中没有线程组。
- 你可以使用很多方法,比如锁,但一般推荐使用标准库中的 Queue 模块(并且限制你的线程交互在 Queue 允许的范围内)。
换句话说,Python 的线程功能远不如 Java 的线程丰富——更不用说每个进程实际上只能运行一个线程的 Python 代码(其他线程可能在运行 C 代码或在等待)。
如果你需要更复杂的功能,也就是超出 Python 限制的线程能力,建议你使用标准库中的 multiprocessing
模块——或者切换到一些允许你使用更丰富线程方法的 Python 实现,比如适用于 JVM 的 Jython 或适用于 .NET 的 IronPython。