[pyar] Colas e Hilos.

Enrique Alejandro Villafañe villafane.enrique en gmail.com
Jue Ago 27 13:27:45 ART 2015


Estoy trabajando en eso, ylo que pasa es que debo eliminar el elemento que
me devuelve la cola, porque al enviarlo ya no lo necesito.

El 27 de agosto de 2015, 10:25, German Sinkovic <germansinkovic en gmail.com>
escribió:

> if cola > 4:
>  for i in range(4)
>    socket.send(cola.pop(0))
>     # en esta linea vos le envias al socket el elemento del sub-indice 0
> de cola, esto se da x veces, hasta que cola se queda con solo 4 elementos.
> termina el ciclo.
>     # por lo que tengo entendido la herramienta .pop toma de forma
> aleatoria un elemento en este caso de la lista [cola], devuelve el valor
> asociado a ella y lo elimina.
>
> ###################
>
> if len[cola] > 4:
> # si el largo de cola (lista de elementos) es mayor a 0
> # Entonces se da lo siguiente ==>
>  for i in range(4)
>     # para i el valor que va tomando el rango en cuatro
>    socket.send(cola[0])
>     # Se enviara al socket el primer valor de la cola
>
> yo probaria de esta forma, sin necesidad de borrarlo.
>
> pudiste resolver tu problema???
>
> El 26 de agosto de 2015, 22:14, Ignacio Rossi <rossi.ignacio en gmail.com>
> escribió:
>
>> > 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
>>>
>>
>>
>> _______________________________________________
>> 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
>>
>
>
>
> --
> German Alejandro Sinkovic
> Técnico en Informática
> Empleado Público en ANSES
> Ingeniería Informática en UNDAV
>
> _______________________________________________
> 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/20150827/89d12748/attachment-0001.html>


More information about the pyar mailing list