[pyar] simulacion de trafico

Matias Graña matias.alejo en gmail.com
Mie Jul 21 10:59:11 ART 2010


Hola, gente;

Tengo una lista de pares [tms, string], que quiero usar para simular
tráfico en un server. Los tms de la lista dicen a qué ritmo hay que
iniciar un Thread con el parámetro string. En rigor, lo que me
interesa es la diferencia entre los tms, no sus valores, por lo que
cuando comienzo todo, miro el tms actual y voy iniciando los Threads a
medida que la diferencia con el primer tms que aparece es el tiempo
que pasó. A los bifes: el código que uso es éste

    pos = 0
    totlen = len(queries)
    tbeg = datetime.now()

    while pos < totlen:
        tnow = datetime.now()
        tdif = tnow - tbeg
        difms = tdif.seconds * 1000 + tdif.microseconds/1000
        if difms >= queries[pos][0]:
            thrd = Pedido(queries[pos][1])
            thrd.start()
            threads.append(thrd)
            print "retraso: %5d" % (difms - queries[pos][0]])
            pos += 1

(los tms están en milisegundos, por eso paso tdif a milisegundos con
tdif.seconds * 1000 + tdif.microseconds/1000). Los pares [tms,string]
vienen en la lista queries, y Pedido es mi clase que extiende Thread.
Con cada Thread imprimo cuánto más tarde se llamó que lo que
correspondía hacerlo. Cuando los tms vienen seguiditos, el server no
da abasto y se acumulan un poco.
La consulta es: seguro que hay mejores maneras de hacer esto.
Cualquier idea que mejore la cosa es bienvenida. El mayor problema que
tengo es que el bucle principal, cuando hay mucha diferencia entre un
tms y el que sigue, corre igual y usa cpu solo para ir comparando
hasta que llegue el momento de iniciar el próximo Thread. Esto hace
que no pueda medir bien la respuesta del server, ya que gasto parte
importante de la cpu en mi script y le dejo menos a atender los
threads que se inician.
En fin, como dije, cualquier idea es bienvenida.

Saludos,
-- Matías Graña



More information about the pyar mailing list