2012-05-13 7 views
16

私は数ヶ月前にPythonを勉強し始めました。そして、私はJythonを見つけました。jython multithreading

Doyスレッドは、doesn't have a GILなのでJythonでは正常に動作しますか?もしそうなら、並行性(スレッド化)に関する良い本を提案できますか?

+3

これは良い質問ですが、正直なところ答えはわかりませんが、私は両方ともマルチスレッドを使用していますので、多分もっと良い質問があります: 'PythonマルチプロセッシングまたはJavaのスレッド化を使用する必要がありますか? jythonは両方のものが混在しているので、どちらを使うかはわかりません。 – Lostsoul

+0

Jpython、つまりJythonを意味しますか?これは、SOのためにはあまり適していないオープンエンドの質問です。 –

+0

[この質問(http://stackoverflow.com/questions/4227269/hidden-multithreading-bottlenecks-in-jython)によると、答えははいです。私は、Pythonマルチスレッドライブラリ、またはjythonを使ったJava同時実行サポートにアクセスすることが可能であることを理解しています。 –

答えて

5

私がマルチスレッドで遭遇した最高の本は、 "Java Concurrency in Practice"です。これはJavaスレッドの同時実行性に非常に重点を置いており、同時性によって生じる問題と可能性を理解し始めると、謙虚で刺激的です。数年前に買ったコピーには、コーディングにいくつかの正誤がありましたが、これはすでに脳が挑戦している問題を悪化させました。ここでは正誤表を確認してください:http://jcip.net/errata.html

(いずれにしてもGUIインターフェイスを使用している人もいますが)並行性に挑戦したいJava開発者向けに設計されていますが、本書に記載されている技術的な困難や微妙な点は、並行性。

ところで、私はJythonも大好きで、JythonでできることはJavaでできることは何でも並行性のあることを確認できます。ただし、並行処理は非同期プログラミング(GUIを含む)および/またはパフォーマンスのために行うことができます。後者の場合、私の意見では、私の経験ではJythonは同等のJavaプログラムより約10倍遅く実行されます。

これは、あなたの要求の厳しいJythonモジュールが、数字を扱うタスクのためにJython以外のものを呼び出す必要があるということです。同時に、今までのJythonはPythonのマルチプロセッシングモジュールを持っていなかったので、プロセス間の通信は、あなたが恐ろしいRMIの領域に挑戦しない限り外されています。もしあなたがそのオプションを取れば、あなたは私よりも男性/女性の方がはるかです。しかし、すべてはOKです:http://www.jython.orgの「The Definitive Guide to Jython」を参照してください...第19章は、並行処理に対するホイッスルストップイントロの一種であり、第10章はJavaとJythonの統合についてです(ヒント:不合理なことです)。

  • 興味深いことに、Jythonサイトでは、わずか10日前に17/05/12バージョン2.7a1がリリースされました。「アルファ」リリース。これには、Python 2.6で提供されたマルチプロセッシングモジュールが含まれているはずです。これをチェックするのが面白いでしょう:そうすればJythonとCPythonのプロセスをリンクするエキサイティングな選択肢が得られるでしょう(悲しいことに、悲しいことに、これはそうではありません - 私が試したときにモジュール名 "マルチプロセッシング" )...

PS最終単語:私はムーアの法則は、アムダールの法則によってimporttanceに取って代わられていると言うよりも、これらの事について多くを知っているほとんどの専門家は、短期手段でプログラミング安定の困難な挑戦います将来のスケーラブルな真の並行プログラムは避けられないでしょう。私が言うことのできない巧妙なコード分析ツールを使って、どのように簡単な真実(つまりスレッド)の並行性を作ることができるのですか?この件と、並行性によって課せられた魅力的で知的な新しい学問分野への投資は、あなたは挑戦が好きです。

3

はい、あなたはreal multi-threadingです。 Jython(JPythonの後継者)は、JVMで動作するPythonの実装です。 Jythonと元のプロジェクトの主な違いの1つは、最初のものがGILを持たず、JVMの実装に基づいた実際のマルチスレッドのサポートを実装していることです。

このbookOReilly'sをご覧になることをお勧めします。

0

最初は混乱しやすい側面は、you can mix and match JavaとJythonの同時実行メカニズムです。しかし、それはすべて動作するようです。その理由は次のとおりです。

  • Jythonの下には、同じ古いJavaがあります。強力なスレッド機構とデータ構造はすべて、Jythonの重い機械の下でも破壊されません。
  • Jythonのスレッドは、Javaスレッドをシャーシとして使用し、PythonスレッドAPIを使用できるように上部構造を追加します。 (スレッド化されたPythonコードの移植をより簡単にする方法はありません)。しかし、2種類のスレッドの本質は似ています。 Jythonスレッドを除いて

    ...優先順位はなく、スレッドグループもスレッドも破棄、停止、中断、再開、または中断できません。あなたがsynchronized (some_object) { ... }の同等の操作を行いたい場合など、RLockを使用するよりも読みにくくなる可能性があるa small bit of fiddling required、そこにある、ので[1]

ザ・Pythonのイディオムは、おそらくもう少し便利です。