[pyar] Colas e Hilos.

German Sinkovic germansinkovic en gmail.com
Jue Ago 27 11:55:09 ART 2015


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


More information about the pyar mailing list