web-dev-qa-db-fra.com

Utiliser Queue dans python

J'essaie d'exécuter ce qui suit dans Eclipse (en utilisant PyDev) et je continue à recevoir des erreurs:

q = queue.Queue (maxsize = 0) NameError: le nom global 'queue' n'est pas défini

J'ai vérifié les documentations et il semble que c'est comme ça que ça doit être placé. Est-ce que j'ai râté quelque chose? Est-ce ainsi que PyDev fonctionne? ou manque quelque chose dans le code? Merci pour toute aide.

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()

Utilisation: SDK Eclipse

Version: 3.8.1 ID de version: M20120914-1540

et Python 3.3

19
Bain

Tu fais

from queue import *

Cela importe déjà toutes les classes du module queue. Remplacez cette ligne par

q = Queue(maxsize=0)
21
David Robinson

C'est parce que vous utilisez: from queue import *

et ensuite vous essayez d'utiliser:

queue.Queue(maxsize=0) 

supprimez la partie queue, car from queue import * importe tous les attributs dans l'espace de noms courant. :

Queue(maxsize=0) 

ou utiliser import queue au lieu de from queue import *.

6
Ashwini Chaudhary

Si vous importez from queue import *, Cela signifie que toutes les classes et fonctions qui importent dans votre code sont entièrement. Vous ne devez donc pas écrire le nom du module, juste q = Queue(maxsize=100). Mais si vous voulez utiliser des classes avec le nom du module: q = queue.Queue(maxsize=100) vous devez écrire une autre chaîne d'importation: import queue, Cela signifie que vous importez tous les modules avec toutes les fonctions non seulement toutes les fonctions qui en premier Cas.

1
Vladyslav