Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2009 07:46:59

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

middle tier

>> REST - лучший. Но только тема несколько выходит за рамки топика. Поэтому с ходу настоятельно советовать поостерегся.

Это библиотека или технология. Если не сложно, дай ссылку, с которой лучше начать знакомство.
И почему на Pyro? Я примеры посмотрел - вроде то, что надо.

Да и от этой проблемы избавлена:

>> Проблема для RPyC очень простая: можно не заметить, что твой код уже перелез на сервер и потому жутко тормозит.



Офлайн

#2 Апрель 10, 2009 12:23:53

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

middle tier

Кстати, попытался сделать вот такой workaround (сервер):

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
requestHandler=RequestHandler)
server.register_introspection_functions()

class MyClass:
def __init__(self, a):
self.a = a
def say(self):
return a

cl = MyClass(100)

def return_my_value():
return cl.say()

server.register_function(return_my_value, 'r_v')

# Run the server's main loop
server.serve_forever()
Та же самая проблема:
Traceback (most recent call last):
File “rpc_client.py”, line 4, in <module>
print s.r_v()
File “/usr/lib/python2.6/xmlrpclib.py”, line 1199, in __call__
return self.__send(self.__name, args)
File “/usr/lib/python2.6/xmlrpclib.py”, line 1489, in __request
verbose=self.__verbose
File “/usr/lib/python2.6/xmlrpclib.py”, line 1253, in request
return self._parse_response(h.getfile(), sock)
File “/usr/lib/python2.6/xmlrpclib.py”, line 1392, in _parse_response
return u.close()
File “/usr/lib/python2.6/xmlrpclib.py”, line 838, in close
raise Fault(**self._stack)
xmlrpclib.Fault: <Fault 1: “<type ‘exceptions.NameError’>:global name ‘a’ is not defined”>

Такое ощущение, что на сервере вообще нельзя держать долгоживущих объектов, а все необходимое для ответа на запрос надо создавать заново для каждого запроса….
Как же тогда с кешированием быть.



Офлайн

#3 Апрель 10, 2009 12:35:19

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

middle tier

demas
    def __init__(self, a):
self.a = a
def say(self):
return a
xmlrpclib.Fault: <Fault 1: “<type ‘exceptions.NameError’>:global name ‘a’ is not defined”>

Такое ощущение, что на сервере вообще нельзя держать долгоживущих объектов, а все необходимое для ответа на запрос надо создавать заново для каждого запроса….
Как же тогда с кешированием быть.
В данном случае у вас банальная опечатка в методе say: return a вместо return self.a :)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Апрель 10, 2009 12:41:08

demas
От:
Зарегистрирован: 2008-09-10
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

middle tier

Ааа….. спасибо.
Да, действительно.
Спасибо.



Офлайн

#5 Апрель 12, 2009 04:54:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

middle tier

demas
REST - технология. О ней довольно много говорят, но чтобы ссылку дать…
Википедия подойдет?. Дальше самому смотреть нужно. Бикинг довольно недавно что-то писал.
Особенность в том, что REST - это очень просто. Все в HTTP - не путать с HTML (который лишь один из диалектов - content-type для http).
Имеешь URI (он же URL). Делаешь правильный запрос. Получаешь адекватный ответ.

Основные принципы:
- все строится на ресурсах
- у каждого ресурса - свой уникальный URI
- форматов представления - множество. Задаются через content-type
- у каждого ресурса есть несколько применимых к нему операций: put, get, delete и т.д.

Примерно так. Это просто еще одна хорошая парадигма. Неочевидная (как неочевидны объектно-ориентированное, функциональное, аспектное, мета - и прочие отличные техники).

Pyro, как и RPyC, не избавлен от следующей проблемы: все что пиклится - проходит. В результате можешь обнаружить, что через сетку лезет уж вовсе непотребное. У нас поймали что-то вроде SQLAlchemy enity, только в нашей ORM (смотрую на новый SQLAlchemy и подумываю - а теперь-то можно попробовать написать правильный адаптер для нашего нереляционного источника. Хоть Байер на PyCon и всячески открещивался от подобных задумок). Объяснил, что так совсем нельзя. Категорически отверг идеи “приспособить как-нибудь”. В результате пересмотрели код и сделали правильно.

Pyro и RPyC для меня - одного поля ягоды. RPyC немножко более Pythonic и потому предпочтительней. Pyro неоправданно тяжеловесен и задумывался как аналог JMI. Со всеми вытекающими.

Кстати, на PyCon была интересная лекция на тему: “Почему некоторые шаблоны проектирования не применяются в Питоне”.
Брали очевидные: visitor, factory… здесь
Было очень здорово (слайды не отражают сказанного, хотя обрисовывают задачку).
Потом часто звучало:

from __future__ import java_style
Traceback (SyntaxError: future feature java_style is not defined (<interactive input>, line 1)



Офлайн

#6 Апрель 12, 2009 07:17:37

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

middle tier

Андрей Светлов
demas
REST - технология. О ней довольно много говорят, но чтобы ссылку дать…
http://anarresti.ya.ru/replies.xml?item_no=193



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version