2012-05-13 26 views
16

幾個月前我開始學習python,然後發現了Jython。jython多線程

線程在Jython中是否正常工作,因爲它doesn't have a GIL?如果是這樣,你能提出一本關於併發(線程)的好書嗎?

+3

這是一個很好的問題,我真的不知道答案,但我有兩個多線程,所以也許更好的問題是:'我需要使用Python多處理或Java的線程?我確信它的工作原理並不能確定你必須使用哪一個,因爲jython是兩者的混合體。 – Lostsoul

+0

你的意思是Jpython或Jython?這是一種開放式問題,它不適合SO,順便說一句。 –

+0

根據[這個問題(http://stackoverflow.com/questions/4227269/hidden-multithreading-bottlenecks-in-jython),答案是肯定的。我知道可以通過jython訪問python多線程庫或java併發支持。 –

回答

5

我在多線程上遇到的最好的書是「Java Concurrency in Practice」。它非常專注於Java線程併發性,當您開始瞭解併發性引入的問題和可能性時,它既令人振奮又令人興奮。我幾年前購買的這個版本在編碼方面有一些錯誤,但這加劇了一個已經有了大腦挑戰的主題:請在這裏查看錯誤:http://jcip.net/errata.html

雖然爲希望進軍併發(其中的方式包括誰在使用過任何形式的GUI界面的人)的Java開發人員,我敢肯定,在這本書中列出的技術困難和微妙適用於任何實現併發性。

順便說一句,我也很喜歡Jython,並且可以確認任何併發性的東西,您可以在Java中執行,您可以顯然在Jython中執行此操作。但是,有一點需要注意:併發性可以用於異步編程(包括GUI)和/或性能。如果對後者有問題,我認爲:根據我的經驗,Jython的運行速度比同等Java程序慢10倍。

這意味着你要求更高的Jython模塊必須調用除Jython以外的其他數據處理任務。與此同時,Jython到目前爲止*還沒有Python的多處理模塊,所以進程間通信已經完成,除非你冒險進入RMI的可怕領域。如果你選擇這個選擇,你比我更像一個男人/女人。但一切正常:請參閱「權威指南Jython」http://www.jython.org ......第19章是一種對併發性的哨聲介紹,第10章是關於集成Java和Jython(提示:這很荒唐)。

  • 有趣的是:在Jython網站上的快速瀏覽顯示,就在10天前,17/05/12,版本2.7a1被髮布......一個「Alpha」版本。這應該包含Python 2.6中的多處理模塊。 Wd有趣地檢查一下:如果是這樣的話,它可能會給你一個令人興奮的選項來鏈接Jython和CPython進程(稍後更新:可悲的是,現在看起來並非如此 - 模塊名稱「multiprocessing」在我嘗試時未被識別)...

PS最後一句話:誰知道更多關於這些東西比我說,摩爾定律在importtance通過阿姆達爾定律,這在短意味着被取代大多數專家認爲編程穩定的艱鉅挑戰並且可擴展的真正併發程序將在未來不可避免。使用聰明的代碼分析工具可以實現真正的(即線程)併發性是多麼容易我不能說,而是在這個主題上的投資以及併發性引發的引人入勝的智能新規則可能會得到回報... if你喜歡挑戰。

3

是的,用Jython你有real multi-threading。 Jython(JPython繼承者)是一個在JVM中運行的Python實現。 Jython和原始項目之間的主要區別之一是,第一個沒有GIL,並且基於JVM的實現實現了真正的多線程支持。

我建議你看看這個bookOReilly's之一。

0

最初令人困惑的方面可能是Java和Jython的併發機制。但這一切似乎都奏效。原因是:

  • Jython下面是舊的Java。它的所有強大的線程機制和數據結構在Jython繁重的機器下都不會失效。
  • Jython的線程將Java線程作爲他們的機箱,並添加一些超結構以使他們說出Python線程API。 (沒有更好的方法來簡化移植線程化Python代碼。)但是這兩種類型的線程的本質是相似的。除了使用Jython線程

    ...沒有優先級,沒有線程組和線程不能被銷燬,停止,暫停,恢復或中斷。 [1]

Python的成語可能更方便一點,因爲,例如,如果你希望做的synchronized (some_object) { ... }相當於有a small bit of fiddling required,這很可能是比使用RLock的可讀性。