25

我正在尝试在 Eclipse 中运行以下命令(使用 PyDev),但我不断收到错误消息:

q = queue.Queue(maxsize=0) NameError: global name 'queue' is not defined

我已经检查了文档,看起来这就是它应该放置的方式。我在这里错过了什么吗?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 版本号:M20120914-1540

和 Python 3.3

4

5 回答 5

27

你做

from queue import *

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

q = Queue(maxsize=0)

小心:“应避免通配符导入(来自 import *),因为它们使命名空间中存在哪些名称变得不清楚,从而使读者和许多自动化工具感到困惑”。Python PEP-8

作为替代方案,可以使用:

from queue import Queue

q = Queue(maxsize=0)
于 2013-01-29T14:16:02.110 回答
7

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

然后您尝试使用:

queue.Queue(maxsize=0) 

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

Queue(maxsize=0) 

或使用import queue代替from queue import *.

于 2013-01-29T14:16:13.017 回答
1

如果你导入from queue import *,这意味着所有导入你的类和函数都完全编码。所以你不能写模块的名字,只是q = Queue(maxsize=100). 但是,如果你想使用带有模块名称的类:q = queue.Queue(maxsize=100)你要编写另一个导入字符串:import queue,这意味着你导入所有具有所有功能的模块,而不仅仅是第一种情况下的所有功能。

于 2017-07-13T19:21:17.877 回答
0

确保您的代码未queue.py将其重命名为其他名称。如果您的文件名是 queue.py,它将尝试在同一个文件中搜索。

于 2020-07-24T09:55:58.157 回答
-5

您可以使用 pip install kombu 安装 kombu

然后导入队列就这样

从kombu导入队列

于 2016-07-24T00:15:57.683 回答