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

Responder a