Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有哪些策略可以编写在CPython、Jython和IronPython中工作的python代码_Python_Ironpython_Jython_Cpython - Fatal编程技术网

有哪些策略可以编写在CPython、Jython和IronPython中工作的python代码

有哪些策略可以编写在CPython、Jython和IronPython中工作的python代码,python,ironpython,jython,cpython,Python,Ironpython,Jython,Cpython,如果您试图同时针对其中两个环境,我可以放心地说,如果您必须使用数据库等,您最终必须为该环境编写唯一的代码。您有处理这种情况的好方法吗?如果您确实发现需要为环境编写独特的代码,请使用python import mymodule_jython as mymodule import mymodule_cpython as mymodule 将这些东西放在一个简单的模块(“模块导入器”)中,然后像这样编写代码: from module_importer import mymodule 这样,您只需

如果您试图同时针对其中两个环境,我可以放心地说,如果您必须使用数据库等,您最终必须为该环境编写唯一的代码。您有处理这种情况的好方法吗?

如果您确实发现需要为环境编写独特的代码,请使用python

import mymodule_jython as mymodule

import mymodule_cpython as mymodule
将这些东西放在一个简单的模块(“模块导入器”)中,然后像这样编写代码:

from module_importer import mymodule

这样,您只需根据平台更改
module\u importer.py

@Daren Thomas:我同意,但您应该使用来确定正在运行的解释器。

我为CPython和IronPython编写代码,但tip也应该适用于Jython

基本上,我在单独的模块/包中编写所有特定于平台的代码,然后根据我运行的平台导入相应的代码。(见上文cdleary的评论)


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

我的第一件事是:关注线程安全。CPython的GIL使得编写线程安全代码变得容易,因为一次只有一个线程可以访问解释器。但是IronPython和Jython的牵手要少一些。

我很确定你已经知道这一点,但不幸的是Jython在这里有两个主要问题

首先,据我所知,只有CPython拥有RAII——您必须关闭自己在Jython、Ironpython等方面的资源


第二,正如前面提到的,是线程安全。

那么,Daren,有没有一种方法可以让模块导入器根据一些环境变量等动态导入正确的变量。对不起,我这里是空白。这将是一个很好的SO问题:“如何动态地发现我们是在运行Jython、CPython还是IronPython?”。然后,您可以在ifs中执行此操作……Python的模块
os
可以用作示例。它提供操作系统例程,例如,
OS.unlink
OS.rename
,等等,具体取决于您所在的系统。据我所知,IronPython(2.0.1)中没有“平台”操作系统也不是。