2016-08-26 5 views
0

私は通常、空で、しばらくの間しか何も表示されないプロセス間のキューを持っています。私のスレッドの一つで、私はこのようにwhileループを定義したい:キューが私の場合にはすぐに起きた空になるまでこれは素晴らしい作品pythonで空の例外を発生させずにget_nowait()を使用する

def mythread(queue1): 

    while (queue1.get_nowait() != 1): 
     #do stuff 

。キューが空の場合、get_nowait()またはget(False)を呼び出すと空のキュー例外が発生します。空の例外を発生させることなく、ブロックせずにキューをチェックする方法はありますか?

+0

ブロックしたくない場合は、空のキューで呼び出すときに何かが発生する必要があります。例外をキャッチして処理します。 – mata

答えて

2

使用empty方法

if queue1.empty(): 
    pass 
else: 
    # get items from the queue 

注:ドキュメントは、 "信頼できない" と言う(冗談)。

メッセージがポストされている間にTrue(キューは空)を返すことができるので、操作は例外をキャッチするほど原子的ではないと考えられます。さて、get_nowait()コールが続きます。他のスレッドもキューを消費することができない限り、それは問題ではないと思います。その場合、競合状態が発生し、キューから読み込もうとするとキューが空になる可能性があります。

+0

良いアイデア、私が望むものの上に別のループが必要なように見える – willpower2727

関連する問題