Ответы пользователя по тегу Python
  • PySerial заменяет '\r' на '\n' при чтении из tty, если pySerial открывает tty с данными. Так и должно быть?

    ivnik
    @ivnik
    1-е чтение-запись отличается от 2-го пачкой ioctl-ей. Вероятно в них дело.

    write(1, «Sending 'Hello?\\r\\n'\n», 21) = 21
    write(3, «Hello?\r\n», 8) = 8
    ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    fstat(4, {st_dev=makedev(0, 10), st_ino=32, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=1000, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 29), st_atime=2013/08/19-15:00:48, st_mtime=2013/08/19-15:00:48, st_ctime=2013/08/19-15:00:48}) = 0
    readlink("/proc/self/fd/4", "/dev/pts/29", 4095) = 11
    stat("/dev/pts/29", {st_dev=makedev(0, 10), st_ino=32, st_mode=S_IFCHR|0620, st_nlink=1, st_uid=1000, st_gid=5, st_blksize=1024, st_blocks=0, st_rdev=makedev(136, 29), st_atime=2013/08/19-15:00:48, st_mtime=2013/08/19-15:00:48, st_ctime=2013/08/19-15:00:48}) = 0
    open("/dev/pts/29", O_RDWR|O_NOCTTY|O_NONBLOCK) = 5
    ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0x500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    ioctl(5, SNDCTL_TMR_START or TCSETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    ioctl(5, SNDCTL_TMR_TIMEBASE or TCGETS, {c_iflags=0, c_oflags=0x4, c_cflags=0x8bd, c_lflags=0, c_line=0, c_cc[VMIN]=0, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x00\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    select(6, [5], [], [], {1, 0}) = 1 (in [5], left {0, 999996})
    read(5, «Hello?\n\n», 100) = 8
    select(6, [5], [], [], {1, 0}) = 0 (Timeout)
    write(1, "\n", 1) = 1
    write(1, «Got: 'Hello?\\n\\n'\n», 18) = 18
    write(1, "\n", 1) = 1
    write(1, «Sending 'Hello?\\r\\n'\n», 21) = 21
    write(3, «Hello?\r\n», 8) = 8
    select(6, [5], [], [], {1, 0}) = 1 (in [5], left {0, 999996})
    read(5, «Hello?\r\n», 100) = 8
    select(6, [5], [], [], {1, 0}) = 0 (Timeout)
    write(1, "\n", 1) = 1
    write(1, «Got: 'Hello?\\r\\n'\n», 18) = 18


    P.S. лог получен командой strace
    Ответ написан
    3 комментария
  • Производительность Scala vs Python

    ivnik
    @ivnik
    Мне кажется проблема производительности в xml парсере. Как выше уже спрашивали, используете DOM или SAX? Если критична производительность/большой объём xml-файлов, то стоит использовать SAX.

    А для ускорения scala программы, имеет смысл поиграться с параметрами jvm, например включить «AggressiveOpts»:

    Запускать так:

    $ JAVA_OPTS="-XX:+AggressiveOpts" scala parser.scala
    

    P.S. исходный код парсера на scala покажете?
    P.P.S. и ещё, для замера производительности желательно «прогреть» jvm, производительность при первом запуске сильно ниже чем спустя некоторое время, т.к. классы ещё не загружены класслоадером и горячие точки не скомпилированы в машинный код jit компилятором. Для более правильной оценки, сделайте «бесконечный» цикл, в котором запускайте парсер, и выводите в консоль время работы парсера, затем ждите некоторое время, пока это число не стабилизируется.
    P.P.P.S. Надеюсь время вы замеряете внутри программы (scala)?
    Ответ написан
    3 комментария
  • Соединение twisted и gstreamer

    ivnik
    @ivnik
    У gstreamer есть такой плагин как fdsink, который будет писать поток в файловый дескриптор. Можно попробовать использовать его (совместно используя pipe, либо сразу выдавать его клиенту (но вероятно это не получится сделать с twisted).
    Ответ написан
  • Как запустить одну копию демона

    ivnik
    @ivnik
    Посмотрите пример тут.
    Ответ написан
    Комментировать