Я пытаюсь запустить следующее в 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 Идентификатор сборки: M20120914-1540

И Python 3.3

24
Bain 29 Янв 2013 в 18:14

4 ответа

Лучший ответ

Ты сделаешь

from queue import *

Это уже импортирует все классы из модуля queue. Измените эту строку на

q = Queue(maxsize=0)
24
David Robinson 29 Янв 2013 в 14:16

Это потому, что вы используете: from queue import *

А затем вы пытаетесь использовать:

queue.Queue(maxsize=0) 

Удалите часть queue, потому что from queue import * импортирует все атрибуты в текущее пространство имен. :

Queue(maxsize=0) 

Или используйте import queue вместо from queue import *.

6
Ashwini Chaudhary 29 Янв 2013 в 14:16

Если вы импортируете from queue import *, это означает, что все классы и функции, импортируемые в вас, полностью кодируются. Таким образом, вы не должны писать имя модуля, просто q = Queue(maxsize=100). Но если вы хотите использовать классы с именем модуля: q = queue.Queue(maxsize=100) вы должны написать еще одну строку импорта: import queue, это означает, что вы импортируете весь модуль со всеми функциями, а не только все функции, которые в первом случае.

1
Vladyslav 13 Июл 2017 в 19:21

Вы можете установить комбу с помощью pip install kombu

А затем импортировать очередь просто так

Из очереди импорта комбу

-5
Mark Francis 24 Июл 2016 в 00:15