.
.
Введение
RPC
PyRO
О докладе
PyRO - библиотека, реализующая RPC методов объектов
Доклад в виде статьи доступен в блоге
http://chtd.ru/blog/pyro
.
.
.
2
.
.
Введение
RPC
PyRO
Зачем нужна параллельность?
На практике возникают задачи, которые не решаются с
помощью последовательного однопоточного
программирования.
Работа в фоне и асинхронность
Распределенная работа
.
.
.
4
.
.
Введение
RPC
PyRO
threading
Содержит инструменты для работы с нитями.
Достоинства:
Общая память
Недостатки:
GIL
Подробнее: Загадочный GIL (Андрей Светлов)
.
.
.
6
Slide 7
Slide 7 text
.
.
Введение
RPC
PyRO
multiprocessing
Содержит инструменты для работы с процессами.
Достоинства:
Настоящая параллельность
Недостатки
Раздельная память
.
.
.
7
Slide 8
Slide 8 text
.
.
Введение
RPC
PyRO
Практическое использование
threading
Реализация: вызов функции в отдельной нити
Минимальные изменения существующего кода
multiprocessing
Реализация: вызов функции в отдельном процессе
Требуется организация взаимодействия процессов
используя
связывющие объекты: Connec on, Queue
Требуются существенные правки в коде
.
.
.
8
.
.
Введение
RPC
PyRO
Пример: Consumer
while True:
data = queue.get()
example(data)
.
.
.
11
Slide 12
Slide 12 text
.
.
Введение
RPC
PyRO
Пример: Consumer
while True:
data = queue_in.get()
result = example(data)
queue_out.put(result)
.
.
.
12
Slide 13
Slide 13 text
.
.
Введение
RPC
PyRO
Пример: Consumer
while True:
(data_type, data) = queue_in.get()
if data_type == "db":
result = example_db(data)
elif data_type == "cache":
result = example_cache(data)
queue_out.put((data_type, result))
.
.
.
13
Slide 14
Slide 14 text
.
.
Введение
RPC
PyRO
Подведение итогов
Существуют ли другие, менее трудоемкие подходы?
.
.
.
14
Slide 15
Slide 15 text
.
.
Введение
RPC
PyRO
RPC
PRC (Remote Procedure Call) - механизм, позволяющий
программам вызывать функции, находящиеся в другом
адресном пространстве.
Как правило, на другом компьютере.
.
.
.
15
.
.
Введение
RPC
PyRO
RPC: Алгоритм применения
Описание интерфейсов
Генерация скелета интерфейса
Реализация интерфейса
.
.
.
17
Slide 18
Slide 18 text
.
.
Введение
RPC
PyRO
RPC: Алгоритм применения
Это разве python way?
.
.
.
18
Slide 19
Slide 19 text
.
.
Введение
RPC
PyRO
PyRO
PyRO - Python Remote Objects
Библиотека для создания удаленных объектов, к которым
можно подключиться и вызывать методы как у обычных
локальных объектов.
.
.
.
19
Slide 20
Slide 20 text
.
.
Введение
RPC
PyRO
PyRo: Класс объекта
class Consumer(object):
def example(data):
result = long_preparate(data)
db.write(result)
.
.
.
20
Slide 21
Slide 21 text
.
.
Введение
RPC
PyRO
PyRO: Сервер PRC
import Pyro4
consumer = Consumer()
daemon = Pyro4.Daemon()
uri = daemon.register(consumer)
print "Consumer uri =", uri
daemon.requestLoop()
.
.
.
21
.
.
Введение
RPC
PyRO
PyRO: benchmarks
Ubuntu 12.04 Intel core i5-2300
2000
connec ons
6.050 sec 331 conn/sec
2000 new proxy
calls
10.675 sec 187 calls/sec
51269 kb
transfer
132636
k/sec.
129.5 mb/sec
10000 calls 1.058 sec 8474 calls/sec
3000000 normal
calls
1.012 sec 2963000/sec
Normal method call is 373 mes faster than Pyro method call.
.
.
.
29
Slide 30
Slide 30 text
.
.
Введение
RPC
PyRO
Применение PyRO: пример 1
Вынесение действий, требующих
продолжительного времени, но результат
выполнения которых не требуется прямо сейчас.
сохранение данных
запись лога
отправка email-ов
сохранение фаилов
...
.
.
.
30
Slide 31
Slide 31 text
.
.
Введение
RPC
PyRO
Применение PyRO: пример 2
На каждом узле кластера запущено
python-приложение, проводящее вычисления.
.
.
.
31
Slide 32
Slide 32 text
.
.
Введение
RPC
PyRO
Применение PyRO: пример 2
Связка iPython notebook и PyRO
.
.
.
32
.
.
Введение
RPC
PyRO
Применение PyRO: пример 3
nameserver = Pyro4.locateNS()
uri = nameserver.lookup("memorydb")
memdb = Pyro4.Proxy(uri)
...
data1 = memdb.request(filters1)
data2 = memdb.request(filters2)
.
.
.
34
Slide 35
Slide 35 text
.
.
Введение
RPC
PyRO
Итого
PyRO библиотека для организации RPC
Объектный подход позволяет подменить объект на proxy
и получить параллельность
Простое и быстрое использование в существующем коде
.
.
.
35