[pyar] Colas e Hilos.

Ignacio Rossi rossi.ignacio en gmail.com
Mie Ago 26 20:28:09 ART 2015


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


More information about the pyar mailing list