私はこれを他の回答と私の経験から集めたウィキとして始めています。自由に編集して追加してください。ただし、壊れたもののリストではなく、実用的なアドバイスに固執するようにしてください。これは、Jythonサイトとの違いの古いリストです。
資源管理
Jythonは参照カウントを使用しないため、リソースはガベージコレクションとして解放されます。これは、同等のCPythonプログラムで表示されるよりもはるかに後のことです。
open('file').read()
ファイルを自動的に閉じません。with open('file') as fp
イディオムを使用することをお勧めします。
- __ del __メソッドは、オブジェクトへの最後の参照が削除された直後ではなく、Jythonコードの非常に遅い段階で呼び出されます。
MySQL統合
mysqldb
acモジュールであるため、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では不正なUnicode文字を表現することはできません。のようなことを試みる
unichr(0xd800)
と例外が発生し、コードにリテラルが含まれているu'\ud800'
と大混乱を引き起こします。
足りないもの
- もちろん、Cモジュールは利用できません。
- os.spawn*関数は実装されていません。代わりにsubprocess.callを使用してください。
パフォーマンス
- ほとんどのワークロードでは、JythonはCPythonよりもはるかに低速です。レポートは3〜50倍遅くなります。
コミュニティ
Jythonプロジェクトはまだ生きていますが、動きが速いわけではありません。devメーリングリストには
月に約20のメッセージがあり、最近コードをコミットしている開発者は約2人しかないようです。