[pyar] Colas e Hilos.

Enrique Alejandro Villafañe villafane.enrique en gmail.com
Mie Ago 26 21:57:45 ART 2015


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150826/e5e00fe8/attachment-0001.html>


More information about the pyar mailing list