我有一个程序从数据库中提取“工作”,然后将其分派给工作人员。在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