繁体   English   中英

Google Apps脚本是否可以重入?

[英]Are Google Apps scripts reentrant?

“重入”可能不是正确的术语,但我认为它很接近。

如果我与另一个用户共享一个脚本,并且我们同时执行它,那么我们是否会覆盖其他每个变量?,或者这两个执行是否发生在完全不同的内存空间中?

我在哪里可以读到这个?

如果重入是错误的术语,那么正确的是什么?

更新14/10/03 o9:45美国东部时间:我认为这不值得提出新问题。

我从Serge和Henrique那里了解到,单独的执行是“线程安全的”,并且共享资源上的操作需要保护,大概是使用Lock Service

我正在努力决定如何使我目前的临时“战略”合理化。 我有一个Web应用程序,它使用电子表格来跟踪许多设置,包括查询另一个大型电子表格中的短名单数据。 我与另一个用户共享副本,然后是另一个用户 现在我有一堆电子表格和脚本副本来跟踪。 (它以这种方式发展 - 不要问)。 我不想丢失“本地缓存”电子表格,但我确实希望避免不必要地共享线程安全脚本的多个副本。

我正在考虑一个集中查找表,它将本地缓存电子表格与给定用户配对,但它真的开始看起来我应该用BigQuery或一些更严重的存储重写整个事情。 这看起来比它的价值更多的努力。

任何建议将不胜感激。

更新14/10/03 12:15美国东部时间:

最初WebApp包含在电子表格中,但我将其移出,因此它们一起共享。 增加疯狂。 我现在有一个脚本,它使用DriveApp创建目录,与用户共享,复制电子表格和脚本以及其他一些内容。 实际上为了安全起见,除了WebAppScript之外,我还有WebAppScriptProxy,它发布了WebAppScript的公共函数。 那是用户与之交互的内容。

不仅是你和另一个用户,还有你和你自己两个不同的函数调用(例如但不仅仅是)2个浏览器窗口......

这就是为什么你不能在Google Apps脚本中使用全局变量的原因:每次执行任何函数时,都会重新初始化所有全局变量,并且它们仅在此函数调用的范围内可用(以及任何函数调用由这个功能。

请记住,这当然只适用于脚本变量,显然不适用于文档或其他永久存储位置(例如属性),其中同时执行肯定会通过相互覆盖来创建并发问题。

它位于完全不同的存储空间中。

我不认为“ 重入 ”是这里最准确的术语,因为没有中断一个人的代码来运行另一个人。 它们都是同时安全地发生的。 我不确定正确的用语是什么。 我想你可以说整个环境都是“线程安全的”,因为它们在不同的线程/进程中执行,并且没有共享变量。

您只需要处理共享资源,例如常见的电子表格或文档属性等。

- 编辑

很难理解你的设置,但无论如何我会建议一种方法。 首先,我建议您只有一个脚本,并且只与用户共享其部署的URL(而不是脚本本身)。 关于使用Spreadsheet和BigQuery,建议不要对BigQuery提出建议。 如果您有这方面的知识并愿意使用它,那就去吧。 但我认为你可以使用Google表格来解决这个问题,由于它继承了并发性,因此它是一个非常好的简单脚本数据库。

最重要的是,只与您的用户分享您必须拥有的内容,并将其他所有内容隐藏起来。 对他们来说这对你来说更简单。 例如,如果他们不需要手动编辑“本地缓存”电子表格,那么请与他们共享。 同样,如果他们需要的是访问您的网络应用程序的链接,那么不要让它变得更复杂。

我倾向于认为脚本更接近于用Perl,Python,Bash等编写的老式CGI脚本。 只有这次它是用JavaScript编写的。

每次访问服务器时,Web服务器都会从头开始启动新版本的脚本。

它有点发烧友,因为它有一个漂亮的框架,用来来回传递信息。 但这就是它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM