Ответы пользователя по тегу Python
  • Как запустить несколько ботов Telegram на одном сервере?

    seriyPS
    @seriyPS
    1) Бот использует telegram bot api или работает как telegram клиент?
    Скорее всего первое.

    2) Тспользует webhook или long pooling?
    Может и не так важно, но способ решения будет разным.

    Просто взять и запустить 2 бота с одинаковым bot api token не получится: нельзя включить 2 webhook или 2 long pooling одновременно.
    Ответ написан
    1 комментарий
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    seriyPS
    @seriyPS
    Можно попробовать использовать Scrapy как фетчер а потом сырые страницы закидывать в какую-то очередь типа RabbitMQ или Kafka.
    Scrapy хорош тем, что он очень модульный (по крайней мере был, когда я последний раз пользовался). Не нравится встроенный планировщик очередей - замени на свой. Не нравится как работает с заголовками / прокси / кешированием - добавляешь свой middleware.

    Главная претензия в моём случае была однопоточность и сложность Twisted. Когда начали упираться в производительность переписали на Erlang просто. Но в целом опыт понравился.
    Ответ написан
    Комментировать
  • На чем писать веб-сервис?

    seriyPS
    @seriyPS
    В случае Python могу посоветовать www.django-rest-framework.org - кода много писать не нужно, особенно в простых случаях.
    Ну и доступ к куче питоновских библиотек.
    OAuth через psa.matiasaguirre.net
    Ответ написан
    Комментировать
  • Не могу распарсить xml с потощью lxml python?

    seriyPS
    @seriyPS
    Не нужен вам XPath. lxml.de/tutorial.html#elements-are-lists
    Делайте итерацию по элементам и рекурсивную функцию (или просто вложенные циклы).
    Что плохо - это то, что у вас структура XML неоднозначно соответствует структуре python словарей. Ну и приведённый XML невалидный - нет корневого элемента (или он неполный?).

    def to_dicts(element):
      obj = {'tag': element.tag,
            'attrs': element.attrs,
            'childs': [to_dicts(child) for child in element]}
      return obj
    Ответ написан
    4 комментария
  • Стоит ли переходить с Python на Go?

    seriyPS
    @seriyPS
    Как верно заметили, зависит от того, чем сейчас занимаетесь и чем хотите заниматься. Если WEB2.0 сайты, то с Python особо нет смысла куда-то уходить. Тут тебе и фреймворки и ORM-ы и шаблонизаторы в ассортименте и опыта много наработано.
    Если сетевые какие-то сложные высококонкуррентные или низколатентные демоны, то идите к нам, в Erlang.
    Go в плане вычислительных задач хорошо работает, ну и для конкуррентных сетевых штук тоже потихоньку Erlang догоняет. Думаю, может найти в онлайн-игрушках применение, если сборщик мусора не станет помехой.
    Ответ написан
    3 комментария
  • Как максимально быстро пройтись по списку из URL-ов, получить код (200 ОК или...) и записать в файл результат вида URL - 200 OK?

    seriyPS
    @seriyPS
    Если обязательно использовать Python, то я бы взял gevent и urllib2. Вместо использования HEAD (который многие серверы не понимают) советую просто не скачивать тело ответа.

    Вот тут пример есть https://github.com/surfly/gevent/blob/master/examp... но он совсем уж простой - на практике лучше иметь пул из ограниченного числа гринлетов.

    Ну и строчку
    data = urllib2.urlopen(url).read()
    нужно заменить на
    resp = urllib2.urlopen(url)
    print resp.getcode()
    resp.close()
    Чтоб только заголовки качать, без тела.

    Насчёт keep-alive лучше не заморачивайтесь, это экономия на спичках (если только у вас не все запросы к одному серверу)

    Twisted лучше не смотрите - это безперспективняк =)
    Ответ написан
    Комментировать
  • Структура данных для поиска подходящих CSS-правил

    seriyPS
    @seriyPS
    Писать собственный рендерер, да ещё на питоне это хардкорно конечно. Я бы не решился.
    Мне кажется, для хранения правил CSS все же нужно непосредственно накладывать последовательно правила на DOM дерево без использования промежуточных хранилищ. Т.е. строим DOM дерево. Считываем последовательно правила из вашего CSS:
    a { display: block; font-size: 12pt; }
    div p.links a { color: green; display: inline; }
    

    и последовательно накладываем правила по селектору (перезаписывая конфликтующие правила, учитывая !important и пр). Получается, что при модификации дерева придется все правила прогонять заново.

    Код браузера можно попытаться тут: github.com/WebKit/webkit/tree/master/Source/WebCore/css поковырять, но там комментариев в коде нет, вряд-ли удастся что то понять =)
    Ответ написан
  • Тестирование вебсервера?

    seriyPS
    @seriyPS
    Если нужен максимально простой, но производительный бенчмарк — попробуйте WRK github.com/seriyps/wrk
    По простоте запуска как Apache Benchmark, по производительности гораздо выше, т.к. может задействовать все ядра процессора и использует более быстрый HTTP парсер).
    Ответ написан
    Комментировать
  • Асинхронный сервер: C или Python?

    seriyPS
    @seriyPS
    Прикол в том, что для большинства баз не делают асинхронных драйверов, так что нужно либо использовать БД с простым текстовым протоколом и реализовать асинхронный драйвер самостоятельно на уровне сокетов, либо заводить потоки под соединения с БД и буферизировать данные.
    Но вообще конечно лучше сперва написать на питоне, провести нагрузочные тесты и выяснить узкие места. Оптимизировать Python код, возможно часть переписать на C как модуль для питона.
    Ответ написан
    Комментировать
  • Python, проблема?

    seriyPS
    @seriyPS
    какой код чудной)))

    Зачем джойнить вывод readlines если можно сделать read().replace('\n', '')?

    Я бы в общем записал как-то так
    import urllib
    link='http://www.barcelona-nsk.ru/catalog/mebel/jacob-delafone/reve/mebel-pod-rakovinu-117x43,5x37sm-reve'
    body=urllib.urlopen(link).read().replace('\n', '').decode('utf8')
    Хотя возможно и дело вкуса…

    А так вам правильно посоветовали см habrahabr.ru/blogs/python/117236/
    Ответ написан
  • Многопользовательский сервер python

    seriyPS
    @seriyPS
    Ой жуть какая X_X…

    Лучше бы такого рода задачи на Erlang делать, но раз уж решили на питоне…

    Для начала — у вас и сервер(ы) и клиенты — все в одном процессе? Просто в разных тредах? Это не очень-то похоже на отказоустойчивую систему…

    Далее, раз у вас сервер занимается только распределением расчетов между клиентами, то Twisted тут сам б-г велел испольовать.

    Вообще написали-бы вы прям 1 в 1 формулировку задания и название предмета к которому это задание, чтоб точно понять что нужно.
    Ответ написан
  • Стоит ли сейчас python-щику изучать Java или C++?

    seriyPS
    @seriyPS
    Могу про себя расказать. На пхп пару лет писал, потом (и сейчас) на питоне уже год с небольшим пишу…

    Недавно Erlang поковырял — вещь отличная для своих задач. Можно изучить за недели 2-3 до достаточно хорошего уровня. Вообще сейчас в большинстве крупных веб-приложений используются Comet соединения, а если в будущем WebSockets войдут в употребление, то в этом деле Erlang-у пожалуй равных нет. Его поковырял и отложил на будущее.

    А в ближайших планах думаю C изучить для того чтобы… писать на нем расширения для питона или каких еще ЯП))

    Насчет C++ — сомневаюсь что на нем web-serverside кто то пишет (кроме гугла в редких случаях). Так что учите Java/C/Ruby и параллельно в питон углубляйтесь, в тот же Twisted например.
    Ответ написан
    1 комментарий
  • Проблема связи php и python через memcached?

    seriyPS
    @seriyPS
    Видимо придется залезть вам в исходники питоньего клиента и почикать там все что связано с флагами. Во флагах (768 и 300 например) клиенты сохраняют информацию о том, в каком виде они закодировали (сериализовали) данные. см github.com/memcached/memcached/blob/master/doc/protocol.txt#L155
    В вашем случае VALUE mfd.php_nexttime 768 10 флаг это 768 а 10 — длина ответа (10 байт). Только не совсем понял почему у вас для одного и того же ключа разные флаги (ведь там оба раза одно и то же значение было??)

    Если вы на обоих концах (php-python) будете использовать одинаковые методы сериализации, посмотрите какими флагами помечает их PHP клиент и подмените в Python клиенте на аналогичные или используйте текстовый флаг по умолчанию. Конкретнее вряд ли подскажу т.к. там уже просто надо в коде ковыряться и править. (см функцию _recv_value(self, server, flags, rlen) в исходниках клиента, можете написать val = buf как вариант для
    else:
                val = buf#вот так!!
                self.debuglog("unknown flags on get: %x\n" % flags)
    )
    Ответ написан
  • Проблема связи php и python через memcached?

    seriyPS
    @seriyPS
    Погулял по коду библиотеки… Попробуйте сначала сделать memcache.debug=True и посмотреть что оно в stderr пишет.
    Ответ написан
  • Python. С чего начать учить?

    seriyPS
    @seriyPS
    Кстати, в качестве IDE могу порекомендовать Aptana PyDEV (как плагин к Aptana или Eclipse)

    А вообще я учился по docs.python.org/tutorial/ и вполне нормально получилось)

    Как я понял на PHP вы уже пишете… Постарайтесь тогда сразу не писать PHP программы на питоне!)
    Ответ написан
    Комментировать