スレッド ロックを使用して簡単なテスト プログラムを作成しました。このプログラムは期待どおりに動作せず、Python インタープリターは文句を言いません。
test1.py:
from __future__ import with_statement
from threading import Thread, RLock
import time
import test2
lock = RLock()
class Test1(object):
def __init__(self):
print("Start Test1")
self.test2 = test2.Test2()
self.__Thread = Thread(target=self.myThread, name="thread")
self.__Thread.daemon = True
self.__Thread.start()
self.test1Method()
def test1Method(self):
print("start test1Method")
with lock:
print("entered test1Method")
time.sleep(5)
print("end test1Method")
def myThread(self):
self.test2.test2Method()
if __name__ == "__main__":
client = Test1()
raw_input()
test2.py:
from __future__ import with_statement
import time
import test1
lock = test1.lock
class Test2(object):
def __init__(self):
print("Start Test2")
def test2Method(self):
print("start test2Method")
with lock:
print("entered test2Method")
time.sleep(5)
print("end test2Method")
両方のスリープが同時に実行されます。ロックを使用するときに期待したものではありません。
test2Method を test1.py に移動すると、すべて正常に動作します。test2.py でロックを作成して test1.py にインポートすると、すべて正常に動作します。別のソース ファイルでロックを作成し、test1.py と test2.py の両方にインポートすると、すべて正常に動作します。
おそらく、サーキュラーの輸入に関係しているのでしょう。
しかし、なぜpythonはこれについて文句を言わないのですか?