我有一個程序從數據庫中提取「工作」,然後將其分派給工作人員。在python中退出一個線程?
我有一個線程專門做一些循環中的工作。它做的工作來自數據庫,並調用得到一個消息阻止:
class MessageThread(Thread):
def __init__(self, db, worker_inbox, *args, **kwargs):
super(MessageThread, self).__init__(*args, **kwargs)
self.db = db
self.worker_inbox = worker_inbox # this is a stdlib Queue.Queue
def run(self):
while True:
message = self.db.get()
self.worker_inbox.put(message)
,而不必把一些「標誌」到數據庫中,有一個很好的方法來阻止這個線程?目前,我正在設置daemon
標誌,當主線程退出時它會將其殺死,但是我想知道是否有更好的機制或設計方法?
'db'看起來像'Queue'。 db如何定義?爲什麼不把標記放在'db'中? – unutbu 2013-05-01 14:40:28
當然,'db'是一個隊列,但工作被其他各種進程放在那裏,所以它不是一個stdlib隊列。我不想在數據庫中放置一個哨兵 - 這是將實現與數據混合在一起。我寧願瞭解是否有這種場景的標準設計架構。 – coleifer 2013-05-01 15:03:55
@coleifer你可以在'.get'上超時嗎?如果是的話,那麼你可以簡單地設置一個共享標誌'ALIVE',並使用'while ALIVE:'超時。 – freakish 2013-05-01 15:06:45