私は数ヶ月前にPythonの勉強を始め、それからJythonを見つけました。
JythonにはGILがないため、スレッドは正しく機能しますか?もしそうなら、並行性(スレッド化)に関する良い本を提案できますか?
私は数ヶ月前にPythonの勉強を始め、それからJythonを見つけました。
JythonにはGILがないため、スレッドは正しく機能しますか?もしそうなら、並行性(スレッド化)に関する良い本を提案できますか?
マルチスレッドで出会った最高の本は「JavaConcurrencyinPractice」です。これはJavaスレッドの並行性に非常に集中しており、並行性によってもたらされる問題と可能性を理解し始めると、謙虚で刺激的なものになります。数年前に購入したコピーには、コーディングに正誤表が含まれていましたが、これはすでに頭の痛い問題を悪化させました。ここで正誤表を確認してください:http: //jcip.net/errata.html。
並行性に挑戦したいJava開発者向けに設計されていますが(ちなみに、これまでにあらゆる種類のGUIインターフェースを使用したことがある人も含まれます)、この本で概説されている技術的な難しさと微妙さは、並行性の実装に当てはまると確信しています。
ちなみに、私もJythonが大好きで、Javaで実行できる並行性に関しては、明らかにJythonで実行できることを確認できます。ただし、注意点があります。並行性は、非同期プログラミング(GUIを含む)および/またはパフォーマンスのためのものである可能性があります。後者の場合、私の意見では、問題が発生します。私の経験では、Jythonの実行速度は同等のJavaプログラムの約10倍です。
これが意味することは、より要求の厳しいJythonモジュールは、数を処理するタスクのためにJython以外のものを呼び出さなければならないということです。同時に、これまでJython *にはPythonのマルチプロセッシングモジュールがなかったため、RMIの恐ろしい領域に足を踏み入れない限り、プロセス間通信は利用できません。あなたがそのオプションをとるなら、あなたは私よりも男性/女性です。しかし、すべて問題ありません。http://www.jython.orgの「TheDefinitive Guide to Jython」を参照してください...第19章は、並行性の一種のホイッスルストップイントロであり、第10章はJavaとJythonの統合に関するものです(ヒント:それはとてつもなく簡単です)。
PS最後の言葉:ムーアの法則がアムダールの法則に取って代わられていると私が言うよりもはるかに多くのことを知っているほとんどの専門家は、要するに、安定したスケーラブルな真の並行プログラムをプログラミングするという困難な課題が避けられないことを意味します将来。私が言うことはできませんが、この主題への投資と、並行性によって課せられた魅力的で知的な新しい推論の分野は、おそらく報われるでしょう...あなたは挑戦が好きです。
はい、Jythonを使用すると、実際のマルチスレッド化が可能になります。Jython(JPythonの後継)は、JVMで実行されるPythonの実装です。Jythonと元のプロジェクトの主な違いの1つは、最初のプロジェクトにはGILがなく、JVMの実装に基づいて実際のマルチスレッドサポートを実装していることです。
例を挙げて試してみました。
要件: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の並行性メカニズムを組み合わせて組み合わせることができるということかもしれません。しかし、それはすべてうまくいくようです。理由は次のとおりです。
...優先順位やスレッドグループはなく、スレッドを破棄、停止、一時停止、再開、または中断することはできません。[1]
Pythonのイディオムは、おそらくもう少し便利です。たとえば、と同等のことをしたい場合synchronized (some_object) { ... }
は、少し手を加える必要があり、 RLockを使用するよりも読みにくくなる可能性があります。