1

私はこの例を研究していました

http://eli.thegreenplace.net/2011/12/27/python-threads-communication-and-stopping/

彼はこのように使っていました

while not self.stoprequest.isSet():
    try:
        dirname = self.dir_q.get(True, 0.05)
        ... # do work
    except Queue.Empty:
        continue

block彼が要素を使用した理由がわかりませんでしたdir_q.get(True)

を使用した場合にプログラムがどのように動作するかを知りたい

self.dir_q.get()

ドキュメントによると、何も指定しない場合、 queue に何かがある場合はそれを取得し、そうでない場合は例外が発生します。

私はそれの何が問題だと思う

は何をしていてblock、何をしているのかtimeout

4

2 に答える 2

1

キューのドキュメントを読んでください。

Queue.get([block[, timeout]]) キューからアイテムを削除して返します。オプションの args block が true で、timeout が None (デフォルト) の場合、アイテムが利用可能になるまで必要に応じてブロックします。timeout が正の数の場合、最大で timeout 秒ブロックし、その時間内にアイテムが利用できなかった場合は Empty 例外を発生させます。それ以外の場合 (block が false)、アイテムがすぐに利用可能な場合はアイテムを返し、そうでない場合は Empty 例外を発生させます (その場合、タイムアウトは無視されます)。

'block' 引数 ('element' ではない) が True で、'timeout' が正の数の場合、Queue は要素が Queue で使用可能になるまで 'timeout' 秒待機します。Queue.get() が呼び出された時点で Queue が空で、指定された「タイムアウト」(例: .05 秒) 内に他のスレッド Queue.put() が Queue に要素を追加しなかった場合、Queue は Empty を発生させます。それ以外の場合は、別のスレッドによって Queue.put() であった最初の要素が返されます。

于 2013-03-03T09:48:14.113 に答える
1

self.dir_q.get()アイテムが利用可能になるまでブロックします。したがってself.stoprequest.set()、タイムアウトを削除すると、プログラムが時間内に反応できなくなる可能性があります。

于 2013-03-03T15:34:22.893 に答える