更新的帖子 于是,我找到了一个解决方案,我在做什么是用Is there any way to kill a Thread in Python?Python的线程设计问题
我想获得一些设计验证(与永远块的方法工作) 。我们有一个相当大的系统,系统的一个组件是通信组件。它负责两件事情,一个发送消息,两个排队等待收到的消息(文件,数据库,队列等)。我通过提供的库接收消息,基本上可以永远等待消息到达。
问题:
1)它是最好能有一个主线程,和两个子线程?
2)它是更好地使接收线程只是永远阻塞,直到消息到达?或者我应该允许它超时(这是一个例外),并继续循环?
让我知道你可能需要的任何详细信息。
现在我基本上有一个接收线程和主线程(也可以用来处理发送),你可以看到下面。下面不包含的唯一的东西是我现在可以在MessageReceiver上调用“终止”的功能,它将退出。
原帖 我想在python环绕一些接收逻辑线程。基本上我们有一个应用程序,在后台轮询消息时会有一个线程,我遇到的问题是那些实际上拉动消息等待消息的消息。让它无法终止...我最终把拉包装在另一个线程中,但我想确保没有更好的方法来做到这一点。
原始代码:
class Manager:
def __init__(self):
receiver = MessageReceiver()
receiver.start()
#do other stuff sending/etc...
class MessageReceiver(Thread):
receiver = Receiver()
def __init__(self):
Thread.__init__(self)
def run(self):
#stop is a flag that i use to stop the thread...
while(not stopped):
#can never stop because pull below blocks
message = receiver.pull()
print "Message" + message
我知道存在明显的锁定问题,但这是控制接收线程永远等待消息的适当方法?
我注意到的一件事是这件东西在等待消息时吃了100%cpu ...... **如果你需要查看停止逻辑,请让我知道,我会发布。
请问您可以发布`Receiver`的代码吗? – 2011-02-14 22:20:24
对我们来说,接收器是一个黑盒子,基本上需要1个参数“超时”。正如我下面所说的,我们希望这件事情永远等下去,除非我们决定关闭程序,那么我们需要一种能够停止拉动的方式。 – Nix 2011-02-15 02:14:59
你能告诉我们关于`Receiver`的一切吗?你知道'pull()'是CPU限还是IO限?如果不知道明显的原因,就很难猜出问题所在。 – 2011-02-15 03:34:33