Gracias a los dos por las respuestas, pero no me sirven como soluciones @Luis El 4 de abril de 2011 21:15, Luis Jiménez Linares <[email protected]>escribió:
> Prueba con break > > while True: > ------------------ > if elem=="stop": > break > El break me aporta, en este caso, lo mismo que el return. Yo lo que necesito es desbloquear la cola, salir del bucle es secundario > > La referencia http://docs.python.org/tutorial/controlflow.html > > Un Saludo. > Luis > @Ángel El 4 de abril de 2011 22:03, Angel Guzman Maeso <[email protected]>escribió: > El 4 de abril de 2011 21:15, Luis Jiménez Linares > <[email protected]>escribió: > > Prueba con break >> >> while True: >> ------------------ >> if elem=="stop": >> break >> > > No estoy muy deacuerdo con usar break en tal caso de un while, creo que su > uso no es muy recomendado por no ser programación estructurada (al igual que > los goto) aunque eso no impide usarlo. > > El poner una variable booleana, puede o no importar. Mi opinión, en general > es que hace el código más fácil de leer y si tienes posteriores > modificaciones posiblemente sea más mantenible si en otras partes se accede > a ese valor, pero para este ejemplo puede usarse sin problemas. > > Creo que tu problema de acceder a la cola y bloquearla es porque el primer > parámetro del get() recibe un True y ese parámetro es el "block", que hace > precisamente eso. Puedes cambiarlo poniendo un false o usando el método > get_nowait() que es equivalente a get(False). > Necesito que sea bloqueante > Añado llamar al task_done() ya que es buena práctica, para formalizar que > la cola ha sido procesada. > > Otra alternativa es usar "yield" para que se produzcan elementos que > generar en el bucle. Dale un vistazo a sus usos. > Entiendo que yield se usa como un return en un bucle pero que se guarda la iteración de este, por tanto, creo que no me serviría. > > En este ejemplo funcional te hago esos cambios, aunque ten en cuenta que no > hay variables mutex establecidas (supongo que si es para otro ejemplo mas > complejo te harán falta donde corresponda). > > #!/usr/bin/env python > #*-* coding: utf8 *-* > # Documentation: http://docs.python.org/library/queue.html > > from Queue import Queue > from threading import Thread > > def do_something(item): > print 'Consuming', item > > def consumer(): > run = True > while run: > if not q.empty(): > item = q.get_nowait() #yield q.get_nowait() # q.get(False) > do_something(item) > q.task_done() > > q = Queue() > num_consumers = 1 > > for i in range(num_consumers): > t = Thread(target=consumer) > t.setDaemon(True) > t.start() > > for item in xrange(1, 11): > q.put(item) > > q.join() > Esto que me propones no podría aplicarlo a mi problema, pero me ha dado una idea para no tener que hacer una llamada bloqueante en la cola. Gracias > > > Espero que te sea útil, saludos > > -- > * Blog*: www.shakaran.net > * Tivion*: un simple reproductor de canales streaming de TV > www.shakaran.net/blog/tivion <http://www..shakaran.net/blog/tivion> > * Apogeus & Agadoth Online: *Juego de rol online: www.apogeus.es & > www.apogeus.es/ao > * Quijost: *Hosting *económico* y *profesional*: www.quijost.com > <http://www.quijost.com> > <http://www.twitter.com/shakaran87> > <http://www.facebook.com/angel.guzman.maeso> > <http://es.linkedin.com/in/angelguzmanmaeso> > <https://launchpad.net/%7Eshakaran> > > > _______________________________________________ > CRySoL mailing list > http://crysol.inf-cr.uclm.es/ > https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol > >
___________________________________________________ Enviado a través de http://alumnos.uclm.es/webmail
_______________________________________________ CRySoL mailing list http://crysol.inf-cr.uclm.es/ https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol
