は、私はJavaで、次のコードを持って言う:(オブジェクト)はPythonで同期されていますか?
public void example() {
synchronized(myObject) {
// do stuff
}
}
どのように私はPythonでこれを達成することができますか?
は、私はJavaで、次のコードを持って言う:(オブジェクト)はPythonで同期されていますか?
public void example() {
synchronized(myObject) {
// do stuff
}
}
どのように私はPythonでこれを達成することができますか?
Javaでは、組み込み同期で自動的にロックを任意のオブジェクトに関連付けることができるため、どのオブジェクトでも同期することができます。 Pythonには同様の自動管理機能がないため、ロックを自分で作成する必要があります。あなただけのオブジェクトとロックを関連付ける場合は、たとえば、あなたが自動的にこのようなすべてのインスタンスでロックが含まれて独自のクラスを作成することができ、Javaのように振る舞うことができます。
import threading
class MyClass(object):
def __init__(self):
self.lock = threading.RLock()
myObject = MyClass()
def example():
with myObject.lock:
# do stuff
threading.Thread(target=example).start()
threading.Thread(target=example).start()
この例では、私はあるRLOCKを使用しましたJava同期ブロックはリエントラントなので、ロックおよびその他のタイプのロックの詳細についてはPython documentationで読むことができます。これはJavaのように動作する単なる方法であり、必ずしもロックを管理する最善の方法ではありません。ロックは単にPythonオブジェクトなので、それらを作成および管理する方法に大きな柔軟性がありますが、最良の方法はユースケースの仕様によって異なります。
pythonの詳細を学ぶGIL –
@pushpendrachauhanこのケースでGILがなぜ重要なのか説明することができますか? – user8398347
http://theorangeduck.com/page/synchronized-pythonをお読みください – chakri