在python中使用Queue

时间:2013-01-29 14:14:56

标签: python python-3.x queue

我正在尝试在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()

使用: Eclipse SDK

版本:3.8.1 构建ID:M20120914-1540

和Python 3.3

5 个答案:

答案 0 :(得分:21)

你做

from queue import *

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

q = Queue(maxsize=0)

答案 1 :(得分:6)

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

然后你正在尝试使用:

queue.Queue(maxsize=0) 

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

Queue(maxsize=0) 

或使用import queue代替from queue import *

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:-5)

你可以安装kombu pip install kombu

然后导入队列就像这样

来自kombu import Queue