Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен.

Основная информация

Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).

Рейтинг: 1
Создана 5 лет назад
Владелец root

Стена группы

Загрузка...
3 года назад
#
Python: строим распределенную систему c PySyncObj

Представьте, что у вас есть класс:

class MyCounter(object):
    def __init__(self):
        self.__counter = 0
    def incCounter(self):
        self.__counter += 1
    def getCounter(self):
        return self.__counter


И вы хотите сделать его распределённым. Просто наследуете его от SyncObj (передав ему список серверов, с которыми нужно синхронизироваться) и отмечаете декоратором @replicated все методы, которые изменяют внутреннее состояние класса:

class MyCounter(SyncObj):
    def __init__(self):
        super(MyCounter, self).__init__('serverA:4321', ['serverB:4321', 'serverC:4321'])
        self.__counter = 0
    @replicated
    def incCounter(self):
        self.__counter += 1
    def getCounter(self):
        return self.__counter


PySyncObj автоматически обеспечит репликацию вашего класса между серверами, отказоустойчивость (всё будет работать до тех пор, пока живо больше половины серверов), а также (при необходимости) асинхронный дамп содержимого на диск.
На базе PySyncObj можно строить различные распределенные системы, например распределенный мьютекс, децентрализованные базы данных, биллинговые системы и другие подобные штуки. Все те, где на первом месте стоит надёжность и отказоустойчивость.

Общее описание

Для репликации PySyncObj использует алгоритм Raft. Raft — это простой алгоритм достижения консенсуса в распределённой системе. Raft разрабатывался в качестве более простой замены алгоритма Paxos. Вкратце алгоритм raft работает следующим образом. Среди всех узлов выбирается лидер, который пингует остальные узлы через определенный промежуток времени. Каждый узел выбирает случайный промежуток времени, который он будет ждать получение пинга от лидера. Когда время ожидания заканчивается, а пинг от лидера не пришел — узел считает, что лидер упал и посылает остальным узлам сообщение, в котором говорит, что он сам стал лидером. При удачном стечении обстоятельств на этом всё и заканчивается (остальные узлы соглашаются). А в случае, если два узла захотели стать лидерами одновременно, процедура выбора лидера повторяется (но уже с другими случайными значениями времени ожидания). Подробнее о выборе лидера вы можете узнать посмотрев визуализацию, либо почитав научную статью.

После того как определён лидер, он отвечает за поддержание распределённого журнала. В распределённый журнал пишутся все действия, изменяющие состояние системы. Действие применяется к системе только в том случае, если большинство узлов подтверждает получение записи — это обеспечивает консистетность. Для того чтобы количество записей в распределенном логе не росло до бесконечности, периодически происходит операция под названием log compaction. Текущий лог выкидывается, а вместо него начинает хранится сериализованное состояние системы на текущий момент.

Чтобы не потерять содержимое (например, при выключении вообще всех серверов), его нужно периодически сохранять на диск. Так как количество данных может быть очень большим, содержимое сохраняется асинхронно. Чтобы одновременно иметь возможность работать с данными и параллельно сохранять их же на диск, PySyncObj использует CopyOnWrite через fork процесса. После fork-а процесс родитель и дочерний процесс имеют общую память. Копирование данных осуществляется операционной системой лишь в случае попытки перезаписи этих данных.

PySyncObj реализован целиком на Python (поддерживается Python 2 и Python 3) и не использует каких-либо внешних библиотек. Работа с сетью происходит при помощи select или poll, в зависимости от платформы.

Подробнее
3 года назад
#
Как я программирую на Python

Часто с началом нового проекта программист не в состоянии увидеть полную картину — он не знает с чего начать, где получить информацию, сколько ее получить, при этом есть шанс засесть за документацией надолго пока не пропадет желание что-либо делать. Я относительно часто делаю проекты «для души» в ранее незнакомых областях, например, программировал микроконтроллеры, делал свой segway, проектировал на ПЛИС свой микропроцессор, делал плагины под Counter-Strike, софт к купюроприемникам и другие проекты, в которых на старте был абсолютным нулем.

Использование Python

Одной из последних была задача рендеринга 3д-объектов, которая описана на хабре в статье habrahabr.ru/post/248153. Я решил создать по ней видеоуроки, которые описывают мой подход к решению задачи с нуля. Я попытался описать последовательность моих действий как это было на самом деле, конечно, ускорив некоторые моменты и вырезав места, где я бывало затуплял минут на 20 пока не выяснял где же накосячил.

Видеоуроки предназначены не для новичков, я примерно ожидаю опыт от полугода программирования и месяца 2 программирования на Python (язык очень простой, учится очень быстро). Я долго думал не слишком ли быстро происходят события на экране и не слишком ли много информации на единицу времени, но пришел к выводу, что тупеж раздражает, а если что-то непонятно — можно поставить на паузу или отмотать назад.

На данный момент я выложил 3 видеоурока, еще 2 уже записаны и монтируются. Гитхаб с уроками github.com/ef-end-y/PythonLessons. Правда, поздно спохватился и начал выкладывать только с 3-го урока.

Парсим obj-файл:



Подробнее
3 года назад
#
Пишем свой канал-бот для Telegram как у Хабра на Python

Недавно ко мне обратился друг с просьбой написать бота, импортирующего новости из RSS-канала на сайте в Telegram-канал. Огромнейшим плюсом данного способа оповещения являются push-уведомления, которые приходят каждому подписанному пользователю на его устройство. Уже давно хотелось заняться чем-то подобным. Недолго думая, в качестве образца я выбрал канал Хабра telegram.me/habr_ru. В качестве языка программирования был выбран Python.

В итоге, мне надо было решить следующие проблемы:

Парсинг RSS.
  • Одним из условий был отложенный постинг сообщений (если после того, как новость была выложена, в течение n часов её скрыли/удалили/переименовали, то она не должна быть опубликована, вместо нее отправляется оповещение о корректной новости)

  • Постинг сообщений в телеграм.

  • Сокращение целевой ссылки с помощью сервиса bit.ly


От себя добавил еще:
  • Ведение логов с помощью библиотеки (logging).

  • Обработка конфига (configparser).


1. Отложенный постинг сообщений

Для решения данной проблемы было принято решение использовать SQLite базу данных. Для работы с БД использовалась библиотека SQLalchemy.

Структура до банального проста — всего одна таблица. Код объекта представлен ниже:

class News(Base):

    __tablename__ = 'news'
   id = Column(Integer, primary_key=True) # Порядковый номер новости
   text = Column(String) # Текст (Заголовок), который будет отправлен в сообщении
   link  = Column(String) # Ссылка на статью на сайте. Так же отправляется в сообщении
   date = Column(Integer)
   # Дата появления новости на сайте. Носит Чисто информационный характер. UNIX_TIME.
   publish = Column(Integer)
   # Планируемая дата публикации. Сообщение будет отправлено НЕ РАНЬШЕ этой даты. UNIX_TIME.
   chat_id = Column(Integer) 
   # Информационный столбец. В данное поле логируется чат, в который было отправлено сообщение
   message_id = Column(Integer) 
   # Информационный столбец. В данный столбец логирует внутренний идентификатор сообщения в канале. 

    def __init__(self, text, link, date, publish=0,chat_id=0,message_id=0):
        self.link = link
        self.text  = text
        self.date = date
        self.publish = publish
        self.chat_id = chat_id
        self.message_id = message_id

    def _keys(self):
        return (self.text, self.link)

    def __eq__(self, other):
        return self._keys() == other._keys()

    def __hash__(self):
        return hash(self._keys())

   def __repr__(self):
        return "<News ('%s','%s', %s)>" % (base64.b64decode(self.text).decode(),\
        base64.b64decode(self.link).decode(),\
        datetime.fromtimestamp(self.publish))
        # Для зрительного восприятия данные декодируются


Для хранения текстовой информации и ссылок использется base64, форматом хранения даты-времени был выбран Unix Timestamp.

Подробнее
4 года назад
#
Python Meetup 27.03.15: machine learning, python AST и статистика игроков World of Tanks

Традиционно в последнюю пятницу месяца состоялся Python Meetup. В мартовском митапе с приглашенными спикерами мы разобрались в следующих темах:
  • Машинное обучение на Python

  • Как устроен Python AST и какие интересные факты есть у диалекта Ну

  • Как при помощи Requests, Asyncio и Aiohttp перестать использовать многопоточный код


Видео и ссылки на презентации смотрите под катом. Приятного просмотра!

Python Meetup

Machine learning with Python / Олег Шидловский
Web developer Doist

В докладе Олега можно узнать о базовых концепциях Machine learning и просмотреть примеры работы с библиотеками, при помощи которых можно легко решать задачи, связанные с машинным обучением.
Смотреть презентацию Олега



Читать далее
4 года назад
#
PyOpenGL с шейдерами

habrahabr.ru

PyOpenGL

В предыдущей статье были рассмотрены основы работы с OpenGL в Python. Для вывода графики использовались встроенные функции модуля glut и фиксированный конвейер OpenGL без шейдеров. По просьбе пользователей habrahabr.ru, на базе предыдущего урока был создан шаблон PyOpenGL приложения, использующего шейдеры и буферные объекты.
Роскошной графики, как и в предыдущей статье, ожидать не стоит. Цель данной статьи — продемонстрировать возможность работы с шейдерами и буферными объектами с использованием модуля PyOpenGL.

Итак, для работы нам понадобятся:

  • Интерпретатор языка Python (ссылка).

  • Среда разработки PyCharm (ссылка) (или любая другая на ваш вкус, подойдет даже блокнот).

  • Библиотека PyOpenGL (ссылка).





5 лет назад
#
xbmcswift2 — микро-фреймворк для написания плагинов к Kodi (XBMC)

habrahabr.ru

Вступление

Это, так сказать, «бонусная» статья в моей серии статей о плагинах к медиацентру Kodi (XBMC). Прежде всего, необходимо отметить, что, начиная с версии 14.0, популярный медиацентр меняет название с XBMC на Kodi. О причинах смены названия можно почитать на официальном сайте и форуме, и для нашей статьи они не принципиальны. Однако дальше в статье будет использоваться новое название — Kodi.

Предыдущие статьи

Подробная анатомия простого плагина для XBMC
Пишем плагин для XBMC с собственным интерфейсом: часть I — теория и простейший пример
Пишем плагин для XBMC с собственным интерфейсом: часть II — диалоги и украшателства
Пишем плагин для XBMC с собственным интерфейсом: часть III — API и микро-фреймворк

5 лет назад
#
Анализ дружеских связей VK с помощью Python

Совсем недавно на Хабре появилась статья о реализации дружеских связей в ВКонтакте с помощью Wolfram Mathematica. Идея мне понравилась, и, естественно, захотелось сделать такой же граф, используя Python и d3. Вот, что из этого получилось.

Внимание! В статье будут присутствовать части кода, описывая самые важные действия, но следует учесть, что проект претерпит еще не одно изменение в своей кодовой базе. Заинтересовавшиеся могут найти исходники на GitHub.

Разобьем задачу по элементам:

  1. Создание и авторизация приложения.

  2. Получение данных.

  3. Визуализация графа.


Что для этого нам понадобится:
  1. Python 3.4

  2. requests

  3. d3

  4. Mozilla FireFox, так как в Chrome нельзя использовать XMLHttpRequest для загрузки локальных файлов (никто не мешает сделать python -m http.server 8000)



5 лет назад
#
Анализ дружеских связей VK с помощью Python. Продолжение

В предыдущей статье мы на основе общих друзей ВКонтакте строили граф, а сегодня поговорим о том, как получить список друзей, друзей друзей и так далее. Предполагается, что вы уже прочли предыдущую статью, и я не буду описывать все заново. Под хабракатом большие картинки и много текста.

Начнем с того, что просто скачать все id пользователей достаточно легко, список валидных id можно найти в Каталоге пользователей Вконтакте. Наша же задача — получить список друзей выбранного нами id пользователя, их друзей и рекурсивно сколь угодно глубоко, в зависимости от указанной глубины.

Код, опубликованный в статье, будет меняться с течением времени, поэтому более свежую версию можно найти в том же проекте на Github.

Как будем реализовывать:

  1. Задаем нужную нам глубину

  2. Отправляем исходные данные либо те id, которые надо исследовать на данной глубине

  3. Получаем ответ


Что будем использовать:
  1. Python 3.4

  2. Хранимые процедуры в ВКонтакте...


5 лет назад
#
Как в Яндексе используют PyTest и другие фреймворки для функционального тестирования

habrahabr.ru

Всем привет! Меня зовут Сергей, и в Яндексе я работаю в команде автоматизации тестирования сервисов монетизации. Перед каждой командой, которая занимается задачами автоматизации тестирования, встает вопрос: «Какой [фреймворк|инструмент] выбрать для написания своих тестов?» В этом посте я хочу помочь вам на него ответить. Если быть конкретнее, речь пойдет об инструментах тестирования на языке Python, но многие из идей и выводов можно распространить на другие языки программирования, поскольку подходы часто не зависят от конкретной технологии…

python

17 18

Авторизация

Войдите, используя Ваш аккаунт

Войти с помощью

Пользователи