有人知道,GAE如何限制Python解释器?例如,它们如何阻止IO操作或URL操作。
共享托管也以某种方式进行?
答案 0 :(得分:1)
来自Google的网站:
应用程序只能访问其他应用程序 通过互联网上的电脑 提供了URL提取和电子邮件 服务。其他电脑只能 通过制作连接到应用程序 HTTP(或HTTPS)请求 标准端口。
应用程序无法写入 文件系统。一个应用程序可以读取文件 但只有上传的文件 应用代码。该应用必须使用 App Engine数据存储区,memcache或 所有数据的其他服务 请求之间存在。
应用程序代码仅在 响应Web请求,排队等待 任务或计划任务,必须 在30内返回响应数据 无论如何都是秒。一个要求 handler不能生成子进程或 响应后执行代码 已被发送。
除此之外,你仍然坚持使用Python 2.5,你不能使用任何基于C的扩展,更多最新版本的Web框架在某些情况下将无法工作(再次使用Python 2.5)。
您可以阅读整篇文章What is Google App Engine?。
答案 1 :(得分:1)
沙箱“内部工作”由他们拥有特殊版本的Python解释器。您没有运行标准Python可执行文件,但是经过特别修改后可以在Google App引擎上运行。
更新:
不,它不是普通意义上的虚拟机。每个应用程序都没有完整的虚拟PC。可能会有一些虚拟化,但谷歌并没有确切地说明了多少或什么。
进程通常在操作系统中已经有限地访问了操作系统的其余部分和硬件。谷歌已经限制了这一点,你得到的环境只允许你阅读文件系统的特定部分,而不是写入它,你不能打开套接字,不允许进行系统调用等
我不知道OS / Filesystem / Interpreter在哪个级别实现了每个限制。
答案 2 :(得分:0)
有一些相当不错的信息。你究竟想做什么?
请看这里:http://code.google.com/appengine/docs/python/runtime.html
您的IO操作受限制如下(禁用模块除外):
App Engine会记录应用程序在一个日历日中使用的每种资源的数量,并在该金额达到应用程序的资源配额时考虑资源耗尽。日历日是太平洋时间午夜开始的24小时。 App Engine会在每天开始时重置所有资源测量值,但存储数据除外,它始终代表正在使用的数据存储存储量。
当应用程序占用所有已分配的资源时,资源将变为不可用,直到补充配额为止。这可能意味着您的应用在配额补充之前无法运行。
应用程序可以通过调用Quota API来确定当前请求到目前为止所花费的CPU时间。这对于分析CPU密集型代码以及查找可以提高CPU效率以节省更多成本的位置非常有用。您可以测量用于整个请求的CPU,或者在一段代码之前和之后调用API然后减去以确定在这两个点之间使用的CPU。
资源|免费默认配额|结算已启用默认配额 Blobstore |存储数据| 1 GB | 1 GB免费;没有最大值 资源|开票已启用|默认配额 每日限制|最高费率 Blobstore API调用| 140,000,000次调用| 72,000次/分钟
嗯,我的桌子不是那么好,但希望仍然可读。
编辑:好的,我明白了。但是先生,你不必使用“f”字。 :)你知道,它有点像整个'教人钓鱼'的场景。谷歌是我一直在问的人,这就是为什么我在这里回答问题的原因。再次编辑:好的,在评论发表之前更有意义。所以我去回答了这个问题。我希望它有所帮助。
答案 3 :(得分:0)
IMO它不是标准的python,而是专门为app引擎打补丁的版本。换句话说,你可以或多或少地想象一个“更高级别”的虚拟机,但它不是模拟x86指令而是python操作码(如果你不知道他们在尝试编写一个名为“foo”的小函数并且执行“import” dis; dis.dis(foo)“你会看到编译器生成的python操作码。”
通过修补python,你可以强加给你任何你想要的限制。当然,您必须禁止使用用户提供的C / C ++扩展模块,因为C / C ++模块可以访问进程可以访问的所有内容。
使用这样的虚拟环境,您可以安全地运行python代码,而无需为每个实例使用单独的x86 VM。