[pyar] Colas e Hilos.

Ignacio Rossi rossi.ignacio en gmail.com
Mie Ago 26 22:14:05 ART 2015


> pero tengo una duda, tengo Qthreads y no threads de python, en ese caso
funciona igualmente Queues?

Nunca usé QThreads, así que no te puedo decir con 100% de seguridad, pero
imaginaría y quiero creer que sí, porque en el fondo son threads.
Capaz algún experto en Qt quiere acotar algo más.

Sobre productor/consumidor: de las docs de Queue: "The queue module
implements multi-producer, multi-consumer queues.", que en criollo quiere
decir que podes hacer put desde varios threads y gets desde varios threads
sobre un mismo objeto Queue, y la cola no se va a romper en el medio. Si
alcanza con eso seguro es mucho menos trabajo y código que implementar algo
a mano con mutexes/locks.

Saludos y suerte

Nacho

El 26 de agosto de 2015, 21:57, Enrique Alejandro Villafañe <
villafane.enrique en gmail.com> escribió:

> Muchas gracias por responder.
>
> Ignacio, todo me quedo claro con tu explicacion, pero tengo una duda,
> tengo Qthreads y no threads de python, en ese caso funciona igualmente
> Queues?
>
> Ricardo, voy a investigar sobre productor consumidor, y si en ultimo caso
> utilizaria semaforos, solo que aun no los se implementar, tambien voy a
> investigar y gracias.
>
> El 26 de agosto de 2015, 19:51, Ricardo Daniel Quiroga <
> l2radamanthys en gmail.com> escribió:
>
>> hola
>> mmm podrias implementar productor consumidor, o simplemente usar
>> semaforos
>> si solo quieres bloquear el acceso a la cola
>>
>> saludos
>>
>> El 26 de agosto de 2015, 20:28, Ignacio Rossi <rossi.ignacio en gmail.com>
>> escribió:
>>
>>> Opa, detalle menor, pero no por eso menos importante,
>>>
>>> Queue requiere que le llames a task_done despues de que terminaste de
>>> procesar el elemento, Ante cualquier duda consulte a su documentación de
>>> cabecera. [0]
>>>
>>> Saludos
>>>
>>> Nacho
>>>
>>> [0] https://docs.python.org/3/library/queue.html#queue.Queue.task_done
>>>
>>>
>>> El 26 de agosto de 2015, 20:19, Ignacio Rossi <rossi.ignacio en gmail.com>
>>> escribió:
>>>
>>>> Hola
>>>>
>>>> > Tengo una aplicacion que toma de una cola una cantidad de elementos.
>>>> Esa cola la estoy manejando con una lista.
>>>>
>>>> ¿Una list común? Si es así y la estás usando sin locks, seguro corrés
>>>> peligro de que los multiples threads se pisen entré si. Para evitar eso sin
>>>> tener que meterse con locks, tenés la clase Queue [0].
>>>>
>>>> Por otro lado, aunque uses Queue, si removés elementos con varios
>>>> threads, la lista puede cambiar entre el chequeo y los pops.
>>>>
>>>> ¿La cantidad de elementos tiene que ser fija? Si solo querés limitar la
>>>> cantidad de elementos que mandás por el socket en cada pasada, podés
>>>> escribir algo así:
>>>>
>>>> enviados = 0
>>>> while enviados < 4:
>>>>     try:
>>>>         socket.send(cola.get())  # OJO: Estoy usando Queue acá
>>>>     except Queue.Empty:
>>>>         break
>>>>     else:
>>>>         enviados += 1
>>>>
>>>> Eso (creo, no lo probé :) ) se asegura de enviar a lo sumo 4 elementos,
>>>> tal vez son menos. El try/except te soluciona lo de usar el if y que entre
>>>> el if y los gets otro thread te "robe" elementos.
>>>>
>>>> > los hilos trabajan de uno a uno en python segun comprendo
>>>>
>>>> No estoy seguro de a que te referís con esto. ¿Estás hablando del
>>>> Global Interpreter Lock (GIL) ?
>>>>
>>>> Espero haberte sacado alguna duda.
>>>>
>>>> Saludos
>>>>
>>>> Nacho
>>>>
>>>>
>>>> [0] https://docs.python.org/3/library/queue.html#module-Queue
>>>>
>>>>
>>>> El 26 de agosto de 2015, 19:48, Enrique Alejandro Villafañe <
>>>> villafane.enrique en gmail.com> escribió:
>>>>
>>>>> Buen dia, tengo un problema grande que he intentado resolver, no lo
>>>>> consigo y estoy seguro que sabran la solucion.
>>>>>
>>>>> Tengo una aplicacion que toma de una cola una cantidad de elementos.
>>>>> Esa cola la estoy manejando con una lista. Hasta ahi todo bien.
>>>>>
>>>>> Pero esa aplicacion envia mediante socket parte de esa lista a un
>>>>> cliente cuando el cliente le dice que no tiene nada que hacer, el problema
>>>>> esta en que el server tambien trata los items de la cola y a pesar de tener
>>>>> un if que me valida el largo de la cola para saber cuantos items voy a
>>>>> enviar, me termina siempre al final dando un error de que estoy intentando
>>>>> sacar elementos de una cola que se quedo vacia, a pesar de haber hecho
>>>>>
>>>>> if cola > 4:
>>>>>  for i in range(4)
>>>>>    socket.send(cola.pop(0))
>>>>>
>>>>> Lo que pasa es que estoy tambien manejando hilos, y el server
>>>>> principal tambien va haciendo parte de tareas de esa cola. No se si lo que
>>>>> pase sea que mientras se entra en el if y se cumple el for, el largo de esa
>>>>> cola baja y ahi ocurre la excepcion, por eso me pregunto, los hilos
>>>>> trabajan de uno a uno en python segun comprendo, pero pudieran alterar el
>>>>> tamano de la cola ambos hilos entre el if y el for.
>>>>>
>>>>> Espero puedan comprender y ayudarme. Gracias nuevamente.
>>>>>
>>>>> --
>>>>> Enrique A Villafañe
>>>>>
>>>>> *Telefonos de Contacto*
>>>>>
>>>>> Celular : +58 412 5151603
>>>>> Oficina: +58 273 5325224 - +58 273 5321592 - +58 273 5325527
>>>>>
>>>>> _______________________________________________
>>>>> pyar mailing list pyar en python.org.ar
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>>
>> --
>>
>> Ricardo Daniel Quiroga
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Enrique A Villafañe
>
> *Telefonos de Contacto*
>
> Celular : +58 412 5151603
> Oficina: +58 273 5325224 - +58 273 5321592 - +58 273 5325527
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150826/debbdefa/attachment.html>


More information about the pyar mailing list