Каковы некоторые стратегии для написания кода Python, который работает в CPython, Jython и IronPython - PullRequest
16 голосов
/ 10 сентября 2008

Имея попытки нацеливаться на две из этих сред одновременно, я могу с уверенностью сказать, что если вам нужно использовать базу данных и т. Д., То в итоге вам придется писать уникальный код для этой среды. У вас есть отличный способ справиться с этой ситуацией?

Ответы [ 6 ]

15 голосов
/ 10 сентября 2008

Если вы делаете и вам требуется написать уникальный код для среды, используйте pythons

import mymodule_jython as mymodule

import mymodule_cpython as mymodule

поместите этот материал в простой модуль ('' module_importer ''?) И напишите свой код следующим образом:

from module_importer import mymodule

Таким образом, все, что вам нужно сделать, это изменить module_importer.py для платформы.

10 голосов
/ 11 сентября 2008

@ Дарен Томас: Я согласен, но вы должны использовать модуль платформы , чтобы определить, какой интерпретатор вы используете.

2 голосов
/ 14 октября 2008

Я пишу код для CPython и IronPython, но tip должен работать и для Jython.

По сути, я пишу весь специфичный для платформы код в отдельных модулях / пакетах, а затем импортирую соответствующий код в зависимости от платформы, на которой я работаю. (см. комментарий cdleary выше)

Это особенно важно, когда речь идет о различиях между реализациями SQLite и если вы реализуете какой-либо код GUI.

1 голос
/ 05 декабря 2008

ИМО № 1: Фокус на безопасности потоков . GIL CPython делает написание потокобезопасного кода простым, потому что только один поток может одновременно обращаться к интерпретатору. Хотя IronPython и Jython немного меньше держат в руках.

0 голосов
/ 12 марта 2009

Здесь есть две основные проблемы ...

Во-первых, насколько мне известно, только CPython имеет RAII - вы должны закрыть свои собственные ресурсы в Jython, Ironpython и т. Д.

И, во-вторых, как уже упоминалось, это безопасность потоков.

0 голосов
/ 05 декабря 2008

Я почти уверен, что вы уже знаете это, но, к сожалению, Jython не может загрузить модули расширения c.

...