Downpour — twisted web клиент для bittorrent

Сегодня утром читая ленту разработчиков Twisted, обратил внимание на интересный проект. Админка слегка напоминает Django. Сразу подумал о потенциальной мощности подобного приложения. Нужно протестировать на своем asus wl500gpv2.

Этот проект поддерживает автоматическую закачку через RSS, импорт и переименование скаченных файлов в медиа библиотеку. Автор говорит, что это идеальное решение для домашних серверов.

1

Лицензия GPLv2

Twisted ПАиПП — Техника разработки

Введение

Сообщество разработчиков Twisted открыто ведет процесс разработки и документирует его. Это позволяет взглянуть на работу профессионалов и позаимствовать базу знаний.

Разработка через тестирование (Test driven development/TDD)

Twisted имеет модуль для тестирования кода(unit tests). Он называется Trial.

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

Немного о технике TDD:

  1. Мы создаем код теста и пишем в нем пустые методы для нашего кода.
  2. Нашего кода не существует! Мы ставим себе задачу для его реализации.
  3. Запускаем Trial. Видим что у нас все горит, — ничего не работает.
  4. Начинаем выполнять эти пункты! Таким образом мы сразу тестируем свой код и планируем работы.

Twisted ПАиПП — Практика в рабочих проектах

Постановка задачи

В качестве примера буду использовать два реализованных проекта:

  1. FATS — Быстрые телефонные сервисы на базе программной IP-PBX Asterisk
  2. DBSync — синхронизатор баз данных в режиме 24/7/365

В первую очередь важно понять необходимость использования Twisted. Как уже говорилось ранее: “есть множество способов решить задачу”.

Twisted ПАиПП — Классические примеры

Deferred \ Callbacks \ Errbacks

Не блокирующий запрос web страницы:

from twisted.web.client import getPage
from twisted.internet import reactor

def lowerCaseContents(contents):
    return contents.lower()

def printContents(contents):
    print contents
    reactor.stop()

deferred = getPage('http://twistedmatrix.com/')


# Добавляем два callback'а для запроса web страницы
# первый преобразует весь полученный текст к нижнему регистру
# второй распечатает ответ запроса в стандартный поток вывода
deferred.addCallback(lowerCaseContents)
deferred.addCallback(printContents)

reactor.run()

Twisted ПАиПП — Взгляд изнутри

Проблема

Внутри сервисов возникают задачи обработки множества запросов или\и распараллеливания задач для увеличения быстродействия. На такие вычисления уходит время, причиной может служить следующие ситуации:

  1. Интенсивные вычисления, например вычисление простых чисел. Большой расход ресурсов компьютера и процессорного времени в частности. (Многие сталкивались с такими задачами только в школе)
  2. Ожидании данных необходимых для расчета конечных результатов программы. (Некоторые также сталкивались с такими задачами в школе. Ждали пока за них решат задачу другие.)

Twisted ПАиПП — Общее видение

Прикладная область:

  1. Мультисервисы
  2. Интеграция узлов распределенных систем
  3. Создание слабо связных, масштабируемых систем

Twisted - ПАиПП

ПАиПП — Практика Асинхронного и Параллельного Программирования

Буду писать ряд статей по данной тематике. Давно уже собирался. Планирую затронуть несколько тем:

  1. Общее видение
  2. Взгляд изнутри
  3. Классические примеры
  4. Практика в рабочих проектах
    • Постановка задачи
    • Проектирование Шаблоны проектирования
  5. Техника разработки (TDD)
  6. Управление пакетами (Release management)
  7. Документирование проекта

В качестве примера буду использовать код самого Twisted, Fats, DBsync(только теоретически), немного затрону Zope3.

Скоро выложу презентацию в удобоваримом виде, она была частично представлена на конференции Exception #07.

Twisted 8.0.1 release

Ну вот и дождались, долго разработчики тянули кота за яйца и наконец то выпустили официальный релиз Twisted.

Twisted 8.0.0pre1 features

Новое

  • twisted.python.modules is a new system for representing and manipulating module paths (i.e. sys.path) (#1951)

  • Log files now include seconds in the timestamps (#867)

  • objgrep now knows how to search through deque objects (#2323)

  • It is now possible to limit the number of log files to create during log rotation (#1095)

  • twisted.python.lockfile contains a DeferredFilesystemLock which gives a Deferred interface to lock file acquisition (#2180)

Twisted 8.0 pre release 1

Сегодня Radix объявил о предварительном выпуске версии Twisted 8.0.

Честно говоря я не совсем понял что повлияло на такой номер версии. Из того что мне удалось узнать на данный момент, могу сказать следующее:

1) Проделана большая работа Кристофером Армстронгом(Радикс) Автоматизация контроля версий. О части этой системы хотел рассказать в докладе на Ex07, но не успел =(.