更新的帖子 於是,我找到了一個解決方案,我在做什麼是用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