【发布时间】:2011-09-30 13:04:58
【问题描述】:
我目前正在尝试为 python 推出我自己的“marshal”代码,以便我可以将编译后的 python 代码存储在 Google App Engine 上,以便以动态方式提供脚本。大家都可以验证,GAE 不支持“marshal”,“pickle”无法序列化代码对象。
我发现我可以使用 types.CodeType() 构造一个代码对象,但它需要 12 个参数。
尽管我已经尝试过了,但我找不到任何有关此调用的文档,我确实需要构造代码对象,以便我可以exec() 它。我的问题是,有谁知道这个types.CodeType()“构造函数”的参数是什么?我使用了info() 定义的here 函数,但它只是吐出通用信息!
快速常见问题解答:
- 问:为什么要编译代码?
- 答:在 Google App Engine 上,CPU 时间成本是真金白银,而我可以节省的每一点 CPU 周期都很重要。
- 问:为什么不使用“元帅”?
- A:那是unsupported modules in Google App Engine 之一。
- 问:为什么不用“pickle”?
- 答:Pickle 不支持代码对象的序列化。
更新
自 2011 年 7 月 7 日起,Google App Engine 基础架构不允许对代码对象进行实例化,因此我的论点没有实际意义。希望这个问题将来能在 GAE 上得到解决。
【问题讨论】:
-
你能解释一下你到底想做什么吗?你将如何处理腌制代码?
-
我希望每个问题都更像这样。
-
@Anurag Uniyal:我在 Google App Engine 基础架构上运行“托管”代码,该代码来自前端,编码人员可以在该前端直接在浏览器上编程,并且代码被即时编译到检查语法/类型错误(很像 Cloud9,但用于 GAE)。我不想在执行时重新编译代码,因为重新编译的峰值会破坏我的 CPU 配额和我的钱包。这个想法是获取字节码(我已经拥有)并在沙盒环境中运行它。
-
@something:这段代码很有帮助!谢谢!但是,“新”模块在 2.6 上已弃用,GAE 的 python 运行时即将更改为 2.7,所以我必须知道
type.CodeType的参数的确切顺序 -
@Chiguireitor:我删除了对“新”模块的需求并将其发布为答案。希望对您有所帮助。
标签: python google-app-engine compiler-construction introspection dynamic-cast