0

データベースから「作業」を取得してワーカーにディスパッチするプログラムがあります。

ループ内でいくつかの作業を行う専用のスレッドがあります。それが行う作業はデータベースから来ており、メッセージを取得するための呼び出しはブロックされています:

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、メインスレッドが終了するとフラグを設定していますが、これを設計するためのより良いメカニズムまたは方法があるかどうか疑問に思いましたか?

4

2 に答える 2

0

コードでキュー内の一意の停止メッセージを探します。通常何らかのオブジェクトが渡される場合、'stop' という文字列は、それを行うための素早い自己文書化方法です。ワーカーを終了するときは、'stop' をキューにドロップします。これにより、スレッドが起動され、完了したことが通知されます。渡すメッセージに適合するブール値、なし、または何かを使用できます。

while True:
    message = self.db.get()
    if instance(message, base string) and message == 'stop':
        break
    ...
于 2013-05-01T15:16:07.030 に答える