El 12/02/14 04:34, Sergi Almacellas Abellana escribió:
El 12/02/14 10:16, Raimon Esteve ha escrit:
2014-02-12 0:56 GMT+01:00 oscar<[email protected]>:
>
>El 11/02/14 15:51, Luis Martinez escribió:
>
>Gracias por la respuesta Jordi,
>
>Siguiendo con tu idea... como hago para que por defecto se realice el
>movimiento directo? Es en alguna parte de la configuración de tryton?
>
>Lo que durante este día estuvimos probando es indicando dentro de la
>configuración de ventas en la opción: "Método de envío de venta" en Manual y
>también en la configuración de la tienda pusimos esa misma opción en manual.
>La situación es que en cualquier caso al procesar la venta desde el TPV me
>sigue generando los movimientos y los envíos y el estátus de la venta en
>"Método de envío de venta" me pone Al procesar la orden, como si no tomara
>en cuanta los cambios que hice.  Es ahí a donde te refieres que hay que
>realizar los movimientos directos?
>
>Hola Luis
>
>El problema de performance no es ocasionado por el workflow de la venta,
>envio - factura (este proceso impacta relativamente poco), el problema es un
>decorador en el POS, (sorpresa que me lleve no siempre los decoradores son
>la mejor opción).
La v3.2 llevará más decoradores de lo que lleva la 3.0;)

Puedes dar detalles?
Exactamente, puedes dar más detalles?? Estaría bien tener los tiempos de ejecucion con decoradores y sin decoradores. Esto lo puedes generar con el módulo timeit [1] i un processo de proteus:


[1] http://docs.python.org/2/library/timeit.html
--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk
Hola Chicos

Bueno, con tanta ocupación tuve un "pequeño dejavu" y lamento si los confundi un poco, el problema del performance se divide en tres partes: el primero el workflow de ventas-envio-factura, si afecta de forma importante el rendimiento del POS esto hace referencia a pos_cash, pero lo arregle haciendo trampa, jejee ;) mande todo ese proceso a un hilo (thread), quizas haya una mejor solución, pero por ahora eso funciona, cuando actualice el modulo POS en bitbucket en estos días recibo sugerencias de mejora. El segundo problema y mas grave aun con el performance tiene que ver con el metodo-decorador que esta en el módulo pos_client de impresión (hecho en Pyside) especifcamente este metodo-decorador (nada tiene que ver con los decoradores nativos de Tryton):

    def printing(f):
        def p(self, *p, **kw):
            self._open_device()
            try:
                res = f(self, *p, **kw)
            finally:
                self._close_device()
            return res
        return p

Este metodo lo usaba y se lo quite obviamente compensando con codigo la falta del decorador, ve

Antes....

*@printing*
    def print_sale(self, sale, lines)

        if self._logo:
            self.print_logo()
        self._printer.set(font=_FONT_B)

Despues...

    def print_sale(self, sale, lines):
*self._open_device()*

        if self._logo:
            self.print_logo()
        self._printer.set(font=_FONT_B)


Que descubri (hablo desde mi ignorancia) que el decorador procesaba todo el metodo print_sale en bloque y no liberaba o ejecutaba la impresion hasta no procesar todo el metodo decorado, obviamente cuando eran muchos productos el tardaba muchisimo porque no iba imprimiendo en tiempo real con la ejecución del metodo print_sale, sino cuando terminara su "lectura". Al fin no borre el decorador printing porque puede ser util para los test de impresion, etc.

Tercero, otro problema de performance era el arranque del cliente POS, leer más de 3500 productos en BD, era muy lento para la respuesta rápida que requiere un TPV cuando pasa cada producto por el lector de codigo de barras, por lo cual hice un mapeo de la lista de productos y se carga en la memoria del programa esto acelera el tiempo de respuesta del cliente (pero si ingresa un nuevo producto al BD se debe reiniciar el POS, para que lo lea) en la mayoria de negocios no creo que sea un problema.

Otro problema que tenia el cliente pos y afectaba el performance era que el proceso de impresion se usaba codigo de tipo,

product.attributex, party.atributex, etc

o sea se referenciaban atributos de las instancias de producto, solución para una mayor velocidad de comunicación entre el cliente (pyside) a traves del protocolo json y el servidor, simplemente el servidor le pasa al cliente los atributos que realmente necesita a la impresion de venta pos pero con un diccionario que es más barato que usar instancias mas costosas para el performance.

bueno, quedo atento a comentarios,

Oscar Alvarez







Responder a