Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Март 22, 2007 20:32:37

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

В описании Python-UNO bridge (http://udk.openoffice.org/python/python-bridge.html) в конце первого примера HelloWorld есть загадочный комментарий, смысл которого для меня не понятен:

# Do a nasty thing before exiting the python process. In case the
# last call is a oneway call (e.g. see idl-spec of insertString),
# it must be forced out of the remote-bridge caches before python
# exits the process. Otherwise, the oneway call may or may not reach
# the target object.
# I do this here by calling a cheap synchronous call (getPropertyValue).
ctx.ServiceManager
У меня получается следующее (может, что-то неправильно):
Перед выходом из питона делаем рискованную вещь. В случае, если последний вызов является односторонним (т.е. см. idl-spec of insertString), его нужно вытеснить из remote-bridge кэша перед тем, как питон завершит процесс. Иначе достижение целевого объекта односторонним вызовом не гарантировано.
В приведенном примере я делаю это посредством легкого синхронного вызова (getPropertyValue).
Пожалуй, “и хрюкатали зелюки как мумзики в мове” для меня будет понятнее, чем этот текст. Текст непонятен настолько, что я даже не знаю, что спросить :). Что такое idl-spec, insertString, remote-bridge кэш, “целевой объект”, “односторонний вызов”, “легкий синхронный вызов”?



Офлайн

#2 Март 22, 2007 22:06:56

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

idl
В комментах предупреждают, что надо данные из кэша синхронизировать перед выходом из проги.



Офлайн

#3 Март 22, 2007 22:45:04

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

Не понятно, что делает вызов “ctx.ServiceManager”, что за кэш и с чем синхронизируются его данные.



Офлайн

#4 Март 22, 2007 23:19:12

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

Насколько я понимаю(а изучал я это целых 10 минут :) ) при работе с удаленным объектом(UNO - Universal Network Objects), кода ты вызываешь методы изменяющие этот самый объект, изменения применяются не сразу и сначала заносятся в кэш. И если не синхронизировать кэш с этим самым объектом, то изменения будут потеряны.

P.S. Вообще, как я понял, UNO напоминает CORBA?



Офлайн

#5 Март 23, 2007 08:29:28

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

slivlen, спасибо, это уже что-то.
Я так понял, что изменения не то чтобы “будут потеряны”, но их применение просто “не гарантировано”.
Ещё понять бы, почему “последний вызов” (насколько я понял, метода insertString) обозван “односторонним”.



Офлайн

#6 Март 23, 2007 08:31:41

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

И кстати, какая связь между “ctx.ServiceManager” и “легким синхронным вызовом (getPropertyValue)”?



Офлайн

#7 Март 23, 2007 08:55:04

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

Все ники заняты
Ещё понять бы, почему “последний вызов” (насколько я понял, метода insertString) обозван “односторонним”.
Oneway call - это метод, который ничего не возвращает и во время выполнения которого не возникают специфические(пользовательские) исключения. Клиент вызывает oneway call метод, затем как только запрос на выполнение этого метода достигает(но не обязательно, сразу начинает выполнятся) удаленного объекта, клиент не дожидаясь результата продолжает выполнение программы. Фактически oneway call методы являются не блокирующими.

P.S. Если нужна более подробная инфа, то читай доки по CORBA oneway call :)



Офлайн

#8 Март 23, 2007 08:56:21

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

Все ники заняты
И кстати, какая связь между “ctx.ServiceManager” и “легким синхронным вызовом (getPropertyValue)”?
ХЗ. Это уже апи надо копать и разбираться :)



Офлайн

#9 Март 23, 2007 12:33:31

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

slivlen, спасибо. Значит, “Oneway call” - это что-то вроде асинхронного вызова.
Единственно, что не совсем понятно, почему написано "In case the last call is a oneway call“. Т.е. вызов ”text.insertString", о котором вроде и идёт речь, может быть как синхронным, так и асинхронным, что ли?



Офлайн

#10 Март 23, 2007 12:47:18

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & OOo: Загадочный комментарий в скрипте

Все ники заняты
Единственно, что не совсем понятно, почему написано “In case the last call is a oneway call”. Т.е. вызов “text.insertString”, о котором вроде и идёт речь, может быть как синхронным, так и асинхронным, что ли?
Нет. Здесь имеется ввиду что последним был любой oneway call(insertString просто приведен для примера). Похоже, что при выполнении обычных методов, происходит также обработка запросов из кэша, поэтому, в случае, когда обычный метод вызывался последним синхронизация не требуется.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version