有什么策略可以编写可在CPython,Jython和IronPython中使用的python代码

时间:2020-03-05 18:50:34  来源:igfitidea点击:

尝试同时针对这些环境中的两个环境时,我可以肯定地说,如果必须使用数据库等,那么最终必须为该环境编写唯一的代码。我们有解决这种情况的好方法吗?

解决方案

回答

如果发现确实需要为环境编写唯一的代码,请使用pythons

import mymodule_jython as mymodule

import mymodule_cpython as mymodule

将这些东西放在一个简单的模块(" module_importer"?)中,然后像这样编写代码:

from module_importer import mymodule

这样,我们要做的就是在每个平台上更改module_importer.py

回答

@Daren Thomas:我同意,但是我们应该使用平台模块来确定我们正在运行的解释器。

回答

我为CPython和IronPython编写了代码,但是技巧对Jython也同样适用。

基本上,我将所有特定于平台的代码编写在单独的模块/程序包中,然后根据正在运行的平台导入适当的代码。 (请参阅上方的Cdleary评论)

当涉及到SQLite实现之间的差异以及我们正在实现任何GUI代码时,这一点尤其重要。

回答

IMO的第一件事:关注线程安全。 CPython的GIL使编写线程安全的代码变得容易,因为一次只能有一个线程可以访问解释器。不过,IronPython和Jython的手感却稍差一些。

回答

我很确定我们已经知道这一点,但是很遗憾,Jython无法加载c扩展模块。

回答

这里有两个主要问题在起作用...

首先,据我所知,只有CPython具有RAII,我们必须关闭自己在Jython,Ironpython等中的资源。

其次,如前所述,线程安全。