Найти - Пользователи
Полная версия: Python & OOo: Загадочный комментарий в скрипте
Начало » Python для экспертов » Python & OOo: Загадочный комментарий в скрипте
1 2
Все ники заняты
В описании 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 кэш, “целевой объект”, “односторонний вызов”, “легкий синхронный вызов”?
slivlen
idl
В комментах предупреждают, что надо данные из кэша синхронизировать перед выходом из проги.
Все ники заняты
Не понятно, что делает вызов “ctx.ServiceManager”, что за кэш и с чем синхронизируются его данные.
slivlen
Насколько я понимаю(а изучал я это целых 10 минут :) ) при работе с удаленным объектом(UNO - Universal Network Objects), кода ты вызываешь методы изменяющие этот самый объект, изменения применяются не сразу и сначала заносятся в кэш. И если не синхронизировать кэш с этим самым объектом, то изменения будут потеряны.

P.S. Вообще, как я понял, UNO напоминает CORBA?
Все ники заняты
slivlen, спасибо, это уже что-то.
Я так понял, что изменения не то чтобы “будут потеряны”, но их применение просто “не гарантировано”.
Ещё понять бы, почему “последний вызов” (насколько я понял, метода insertString) обозван “односторонним”.
Все ники заняты
И кстати, какая связь между “ctx.ServiceManager” и “легким синхронным вызовом (getPropertyValue)”?
slivlen
Все ники заняты
Ещё понять бы, почему “последний вызов” (насколько я понял, метода insertString) обозван “односторонним”.
Oneway call - это метод, который ничего не возвращает и во время выполнения которого не возникают специфические(пользовательские) исключения. Клиент вызывает oneway call метод, затем как только запрос на выполнение этого метода достигает(но не обязательно, сразу начинает выполнятся) удаленного объекта, клиент не дожидаясь результата продолжает выполнение программы. Фактически oneway call методы являются не блокирующими.

P.S. Если нужна более подробная инфа, то читай доки по CORBA oneway call :)
slivlen
Все ники заняты
И кстати, какая связь между “ctx.ServiceManager” и “легким синхронным вызовом (getPropertyValue)”?
ХЗ. Это уже апи надо копать и разбираться :)
Все ники заняты
slivlen, спасибо. Значит, “Oneway call” - это что-то вроде асинхронного вызова.
Единственно, что не совсем понятно, почему написано "In case the last call is a oneway call“. Т.е. вызов ”text.insertString", о котором вроде и идёт речь, может быть как синхронным, так и асинхронным, что ли?
slivlen
Все ники заняты
Единственно, что не совсем понятно, почему написано “In case the last call is a oneway call”. Т.е. вызов “text.insertString”, о котором вроде и идёт речь, может быть как синхронным, так и асинхронным, что ли?
Нет. Здесь имеется ввиду что последним был любой oneway call(insertString просто приведен для примера). Похоже, что при выполнении обычных методов, происходит также обработка запросов из кэша, поэтому, в случае, когда обычный метод вызывался последним синхронизация не требуется.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB