【发布时间】:2010-09-08 09:17:57
【问题描述】:
尝试同时针对其中两个环境,我可以肯定地说,如果您必须使用数据库等,您最终必须为该环境编写唯一的代码。你有很好的方法来处理这种情况吗?
【问题讨论】:
标签: python ironpython jython cpython
尝试同时针对其中两个环境,我可以肯定地说,如果您必须使用数据库等,您最终必须为该环境编写唯一的代码。你有很好的方法来处理这种情况吗?
【问题讨论】:
标签: python ironpython jython cpython
如果您确实发现需要为环境编写独特的代码,请使用 pythons
import mymodule_jython as mymodule
import mymodule_cpython as mymodule
将这些东西放在一个简单的模块中(''module_importer''?),然后像这样编写代码:
from module_importer import mymodule
这样,您只需在每个平台上更改module_importer.py。
【讨论】:
os可以作为例子。它提供操作系统例程,例如os.unlink、os.rename 等,具体取决于您使用的系统。
@Daren Thomas:我同意,但您应该使用 platform module 来确定您正在运行的解释器。
【讨论】:
我为 CPython 和 IronPython 编写代码,但tip 也应该适用于 Jython。
基本上,我将所有特定于平台的代码编写在单独的模块/包中,然后根据我正在运行的平台导入适当的代码。 (见上面cdleary的评论)
当涉及到 SQLite 实现之间的差异以及您正在实现任何 GUI 代码时,这一点尤其重要。
【讨论】:
IMO 第一件事:关注线程安全。 CPython 的 GIL 使编写线程安全代码变得容易,因为一次只有一个线程可以访问解释器。 IronPython 和 Jython 的手感稍差一些。
【讨论】:
我很确定您已经知道这一点,但不幸的是 Jython can't load c extension modules.
【讨论】:
这里有两个主要问题...
首先,据我所知,只有 CPython 具有 RAII - 您必须关闭自己在 Jython、Ironpython 等中的资源。
其次,如前所述,是线程安全。
【讨论】: