在python中使用Queue

Bai*_*ain 20 python queue python-3.x

我正在尝试在Eclipse中运行以下命令(使用PyDev)并且我一直收到错误:

q = queue.Queue(maxsize = 0)NameError:未定义全局名称"queue"

我已经检查了文档,看起来它应该如何放置.我在这里错过了什么吗?这是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()
Run Code Online (Sandbox Code Playgroud)

使用:Eclipse SDK

版本:3.8.1构建ID:M20120914-1540

和Python 3.3

Dav*_*son 22

你做

from queue import *
Run Code Online (Sandbox Code Playgroud)

queue已经从模块中导入了所有类.将该行更改为

q = Queue(maxsize=0)
Run Code Online (Sandbox Code Playgroud)

  • 这不是关于更好还是更好的工作 - 当你使用顶部的`from queue`时,你不再需要在调用它时指定`queue`.在某些方面,"更好"(它是一个较短的代码行)在某些方面它更"糟糕"(有人阅读代码不知道该类来自哪里) (5认同)

Ash*_*ary 6

那是因为你正在使用: from queue import *

然后你要尝试使用:

queue.Queue(maxsize=0) 
Run Code Online (Sandbox Code Playgroud)

删除queue部件,因为将from queue import *所有属性导入当前命名空间.:

Queue(maxsize=0) 
Run Code Online (Sandbox Code Playgroud)

或使用import queue而不是from queue import *.