Реентерабельны ли скрипты Google Apps?

«Реентерабельность», возможно, не самый подходящий термин, но я думаю, что это близко.

Если я делюсь сценарием с другим пользователем, и мы оба выполняем его одновременно, перезаписываем ли мы переменные друг друга? Или два выполнения происходят в совершенно разных областях памяти?

Где я могу прочитать об этом?

Если реентерабельность - неправильный термин, какой правильный?

Обновление 14/10/03 o9: 45 EDT: Я не думаю, что это дает основание задавать новый вопрос.

Насколько я понимаю от Сержа и Энрике, отдельные исполнения являются «поточно-ориентированными» и что операции с общими ресурсами нуждаются в защите, предположительно с помощью Заблокировать службу.

Я пытаюсь решить, как рационализировать мою текущую специальную «стратегию». У меня есть веб-приложение, в котором используется электронная таблица для отслеживания множества настроек, в том числе для запроса данных из короткого списка в другой большой таблице. Я поделился копиями с другим пользователем, затем с другим. Теперь у меня есть куча электронных таблиц и копий скриптов, за которыми нужно следить. (Так оно и выросло - не спрашивайте). Я не хочу терять электронные таблицы "локального кеша", но я хочу избежать ненужного совместного использования нескольких копий поточно-ориентированного сценария.

Я рассматриваю централизованную таблицу поиска, которая связывает электронную таблицу локального кеша с данным пользователем, но действительно начинает выглядеть так, как будто я должен переписать все это с помощью BigQuery или другого более серьезного хранилища. Похоже, это больше усилий, чем того стоит.

Любое предложение будет оценено.

Обновление 14/10/03 12:15 EDT:

Первоначально веб-приложение содержалось в электронной таблице, но я переместил его, чтобы они использовались вместе. Чтобы добавить сумасшествия. Теперь у меня есть скрипт, который использует DriveApp для создания каталогов, совместного использования с пользователем, копирования в электронную таблицу и скрипт и некоторых других вещей. Фактически, в целях безопасности, помимо WebAppScript, у меня есть WebAppScriptProxy, который публикует общедоступные функции WebAppScript. Это то, с чем взаимодействует пользователь.


person Martin Bramwell    schedule 03.10.2014    source источник
comment
Ответы настолько похожи, что я не могу легко сказать, какой из них более правильный. Мне придется отдать «это» Энрике за упоминание о потокобезопасности. Большое спасибо вам обоим.   -  person Martin Bramwell    schedule 03.10.2014
comment
Содержится ли ваше веб-приложение в этой таблице локального кеша? И вы поделились этим листом с другими пользователями, и они сделали свои собственные копии, а также развернули свои собственные копии вашего веб-приложения?   -  person Henrique G. Abreu    schedule 03.10.2014
comment
@Hasan - Хороший выбор, он лучший (он как бы научил меня многому из того, что я знаю ;-) бесконечно благодарен за это !!), но все равно спасибо ;-) - по поводу вашего редактирования: не могли бы вы уточнить, что за рабочий процесс вы имеете в виду? что делают другие пользователи?   -  person Serge insas    schedule 03.10.2014
comment
@Henrique - пожалуйста, посмотрите мое второе обновление.   -  person Martin Bramwell    schedule 03.10.2014
comment
Хасан, я обновил свой ответ. @Serge, спасибо за комплимент, я тоже многому с тобой научился :)   -  person Henrique G. Abreu    schedule 03.10.2014


Ответы (3)


Это совершенно разные области памяти.

Я не думаю, что "реентерабельность" здесь самый точный термин, поскольку здесь нет прерывание одного кода для запуска другого. Все они происходят одновременно и безопасно. Я не совсем уверен, что это за термин. Я думаю, вы могли бы сказать, что вся среда является «поточно-ориентированной», поскольку они выполняются в разных потоках / процессах и никакие переменные не используются совместно.

Вам нужно только позаботиться об общих ресурсах, таких как общая таблица или свойство документа и т. Д.

--редактировать

Трудно понять вашу настройку, но я все равно предложу подход. Прежде всего, я рекомендую вам иметь только один скрипт и предоставлять пользователям только его развернутый URL (а не сам скрипт). Что касается перехода между Spreadsheet и BigQuery, действительно невозможно посоветовать против BigQuery. Если у вас есть знания и вы готовы с ними работать, тогда дерзайте. Но я думаю, что вы можете что-то придумать с помощью Google Таблиц, которые из-за своей унаследованной природы параллелизма представляют собой довольно хорошую простую базу данных для скриптов.

В итоге, поделитесь с пользователями только тем, что вы должны, и держите все остальное скрытым. Им и вам так проще. Например, если им не нужно вручную редактировать электронную таблицу «локального кэша», поделитесь ею с ними. Опять же, если все, что им нужно, это ссылка для доступа к вашему веб-приложению, не усложняйте его.

person Henrique G. Abreu    schedule 03.10.2014

Не только вы и другой пользователь, но и вы и вы между двумя разными вызовами функций из (например, но не только) двух окон браузера ...

Вот почему вы не можете использовать глобальную переменную обычным способом в скрипте Google Apps: каждый раз, когда вы выполняете какую-либо функцию, все глобальные переменные повторно инициализируются, и они доступны только в рамках этого вызова функции (и любого вызова функции, сделанного из в этой функции.

Имейте в виду, конечно, что это применимо только к переменным сценария, а не к документам или другим постоянным местам хранения (например, свойствам), где одновременное выполнение наверняка вызовет проблемы параллелизма, перезаписывая друг друга.

person Serge insas    schedule 03.10.2014

Я склонен думать о сценариях как о более близких к старым добрым сценариям CGI, написанным на Perl, Python, Bash и т. Д. Только на этот раз он написан на JavaScript.

Каждый раз, когда вы попадаете на сервер, веб-сервер запускает новую версию скрипта с нуля.

Это немного интереснее, потому что у него есть отличная структура, которую он использует для перемещения информации туда и обратно. Но это почти все.

person Nexus    schedule 04.10.2014