web-dev-qa-db-ja.com

pythonでキューを使用する

私はEclipseで(PyDevを使用して)次を実行しようとしていますが、エラーが発生し続けます:

q = queue.Queue(maxsize = 0)NameError:グローバル名「キュー」が定義されていません

私はドキュメントをチェックし、それがどのように配置されるべきであるように見えます。ここに何かが足りませんか?それはPyDevの仕組みですか?またはコードに何かが欠けていますか?すべての助けてくれてありがとう。

from queue import *

def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

def main():

    q = queue.Queue(maxsize=0)
    for i in range(num_worker_threads):
         t = Thread(target=worker)
         t.daemon = True
         t.start()

    for item in source():
        q.put(item)

    q.join()       # block until all tasks are done

main()

使用:Eclipse SDK

バージョン:3.8.1ビルドID:M20120914-1540

およびPython 3.3

19
Bain

あなたがやる

from queue import *

これにより、queueモジュールからすべてのクラスが既にインポートされます。その行を

q = Queue(maxsize=0)
21
David Robinson

あなたが使用しているためです:from queue import *

そして、あなたは使用しようとしています:

queue.Queue(maxsize=0) 

from queue import *はすべての属性を現在のネームスペースにインポートするため、queue部分を削除します。 :

Queue(maxsize=0) 

またはimport queueの代わりにfrom queue import *を使用します。

6

_from queue import *_をインポートする場合、これはコードをインポートするすべてのクラスと関数を完全に意味します。したがって、モジュールの名前を記述してはならず、q = Queue(maxsize=100)だけを記述してください。ただし、モジュールの名前がq = queue.Queue(maxsize=100)のクラスを使用する場合は、別のインポート文字列を書き込む必要があります:_import queue_ 。

1
Vladyslav