Tôi đã viết một chương trình thử nghiệm đơn giản bằng cách sử dụng khóa khóa. Chương trình này không hoạt động như mong đợi, và trình thông dịch python không phàn nàn.Hành vi không mong muốn khi sử dụng khóa chủ đề python và nhập khẩu circulair
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")
Cả hai ngủ được thực hiện cùng một lúc! Không phải những gì tôi mong đợi khi sử dụng khóa.
Khi test2Method được chuyển đến test1.py mọi thứ hoạt động tốt. Khi tôi tạo khóa trong test2.py và nhập nó trong test1.py, mọi thứ hoạt động tốt. Khi tôi tạo khóa trong một tệp nguồn riêng biệt và nhập nó cả trong test1.py và test2.py, mọi thứ đều hoạt động tốt.
Có lẽ nó phải liên quan đến nhập khẩu circulair.
Nhưng tại sao không python phàn nàn về điều này?
Cảm ơn bạn đã giải thích. Python khá mới đối với tôi, tôi chưa bao giờ bắt gặp hành vi này. Tôi vui vì tôi đã hỏi, bởi vì nó có thể xảy ra trong các tình huống khác, không phải luồng, là tốt. – user1997293
@ user1997293: Có bạn đúng hành vi này là rất phổ biến và vui mừng câu trả lời của tôi là hữu ích :) – mouad