簡體   English   中英

jython 多線程

[英]jython multithreading

幾個月前我開始學習 Python,然后我找到了 Jython。

線程在 Jython 中是否正常工作,因為它沒有 GIL 如果是這樣,你能推薦一本關於並發(線程)的好書嗎?

我在多線程方面遇到的最好的書是“Java Concurrency in Practice”。 它非常專注於 Java 線程並發性,當您開始了解並發性引入的問題和可能性時,它既令人謙卑又令人興奮。 不過,我幾年前購買的副本在編碼方面有一些勘誤,這加劇了一個已經具有挑戰性的主題:在此處查看勘誤: http : //jcip.net/errata.html

雖然是為希望探索並發性的 Java 開發人員(順便說一下,包括曾經使用過任何類型的 GUI 界面的任何人)而設計的,但我確信本書中概述的技術困難和微妙之處適用於任何並發性實現。

順便說一句,我也喜歡 Jython,並且可以確認任何可以在 Java 中執行的並發方面的操作顯然都可以在 Jython 中執行。 但是,有一個警告:並發可以用於異步編程(包括 GUI)和/或性能。 如果對於后者,您有問題,在我看來:根據我的經驗,Jython 的運行速度比等效的 Java 程序慢 10 倍。

這意味着您要求更高的 Jython 模塊將不得不調用 Jython 以外的其他東西來處理數字運算任務。 同時,Jython 到目前為止* 還沒有 Python 的多處理模塊,因此進程間通信已經過時,除非您冒險進入 RMI 的可怕領域。 如果你選擇那個選項,你比我更像一個男人/女人。 但一切都好:請參閱http://www.jython.org 上的“Jython 權威指南”……第 19 章是對並發的簡要介紹,第 10 章是關於集成 Java 和 Jython(提示:這太容易了)。

  • 有趣:快速瀏覽 Jython 站點表明,就在 10 天前,2012 年 5 月 17 日,發布了 2.7a1 版……一個“Alpha”版本。 這應該包含 Python 2.6 附帶的多處理模塊。 Wd 檢查這一點很有趣:如果是這樣,它大概為您提供了鏈接 Jython 和 CPython 進程的令人興奮的選項(稍后更新:可悲的是,目前看來並非如此 - 我嘗試時無法識別模塊名稱“multiprocessing” )...

PS 最后一句話:大多數對這些事情了解的比我說的要多得多的專家說,摩爾定律的重要性正在被阿姆達爾定律所取代,簡而言之,這意味着編寫穩定和可擴展的真正並發程序的艱巨挑戰在未來。 使用聰明的代碼分析工具可以實現真正的(即線程)並發到底是多么容易我不能說,但是在這個主題上的投資以及並發強加的引人入勝的、智力新的推理學科可能會得到回報......如果你喜歡挑戰。

是的,使用 Jython 可以實現真正的多線程 Jython(JPython 的繼承者)是在 JVM 中運行的 Python 實現。 Jython 與原始項目的主要區別之一是,第一個項目沒有 GIL,而是基於 JVM 的實現實現了真正的多線程支持。

我建議你看看這本書OReilly 的本書

我用一個例子試過了。

要求:
from rough import print_time from datetime import datetime """ This is actually using python threading package. One thing I came to know is that if we use the python threading module also, internally Jython chnages it to Java thread and work. """ # from threading import Thread, InterruptedException """ This is the java threading module. """ from java.lang import Thread, InterruptedException """ Here you can call your module from the run method. For passing arguments, you can use the constructor of the Cycle class. """ class Cycle(Thread): def __init__(self,time1=1): Thread.__init__(self) # arguments for the run method self.time1 = time1 def run(self): try: # Calling the required module with given arguments print_time(self.time1) except InterruptedException: print("Exception") if __name__ == '__main__': print("start time:",datetime.now()) for i in range(100): Cycle(i).start() print("end time:",datetime.now())

請在https://github.com/om12nayak/Jython_multithreading_demo 中找到完整代碼

最初令人困惑的方面可能是您可以混合搭配Java 和 Jython 的並發機制。 但這一切似乎都奏效了。 原因是:

  • Jython 下面是同樣的舊 Java。 在繁重的 Jython 機器下,其所有強大的線程機制和數據結構都不會收支平衡。
  • Jython 的線程以 Java 線程為框架,並添加了一些上層結構,使它們能夠使用 Python 線程 API。 (沒有更好的方法可以更輕松地移植線程化 Python 代碼。)但這兩種線程的本質是相似的。 除了 Jython 線程

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

Python 習慣用法可能更方便一些,因為,例如,如果您希望執行與synchronized (some_object) { ... }等效的操作,則需要進行一些修改,這可能比使用RLock

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM