Я начинаю это как вики, собранную из других ответов и моего опыта. Не стесняйтесь редактировать и добавлять материал, но, пожалуйста, старайтесь придерживаться практических советов, а не списка сломанных вещей. Вот старый список отличий от сайта Jython.
Управление ресурсами
Jython не использует подсчет ссылок, поэтому ресурсы высвобождаются по мере их
мусор, который гораздо позже, чем вы увидите в эквивалентном
Программа CPython
open('file').read()
не закрывает файл автоматически.
Лучше используйте идиому with open('file') as fp
.
- Метод __ del __ вызывается очень поздно в коде Jython, а не сразу
после удаления последней ссылки на объект.
Интеграция с MySQL
mysqldb
является модулем c, и поэтому не будет работать в jython. Вместо этого вы
следует использовать com.ziclix.python.sql.zxJDBC
, который поставляется в комплекте с Jython.
Заменить следующий код MySQLdb:
connection = MySQLdb.connect(host, user, passwd, db, use_unicode=True, chatset='utf8')
С:
url = "jdbc:mysql://%s/%s?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" % (host, db)
connections = zxJDBC.connect(url, user, passwd, "com.mysql.jdbc.Driver")
Вам также необходимо заменить все _mysql_exception
на zxJDBC
.
Наконец, вам нужно заменить заполнители запросов с %s
на ?
.
Unicode
- Вы не можете выразить недопустимые символы Юникода в Jython. Пробовать что-то
например,
unichr(0xd800)
вызовет исключение и будет иметь буквенное значение u'\ud800'
в вашем коде просто будет хаос.
Пропавшие вещи
- Модули C не доступны, конечно.
- os.spawn * функции не реализованы. Вместо этого используйте subprocess.call.
Performance
- Для большинства рабочих нагрузок Jython будет работать намного медленнее, чем CPython. Отчеты
от 3 до 50 раз медленнее.
Пользователи
Проект Jython все еще жив, но не быстро развивается.
список рассылки dev
имеет около 20 сообщений в месяц, и, кажется, только около 2 разработчиков
код в последнее время.