Tôi cần chạy nhiều luồng của lớp Observer bằng số phần tử trong danh sách dirlist. Khi tôi chạy lệnh python console thì nó hoạt động tốt.
lớp Observer(Thread):
def run(tự):
naptime = random.randint(1,10)
print(self.name + ' đang bắt đầu, chạy trong %ss.' % thời gian ngủ trưa)
time.sleep(thời gian ngủ trưa)
in(self.name + 'xong')
người quan sát = {}
cho d trong dirlist:
người quan sát[d] = Người quan sát()
người quan sát[d].bắt đầu()
Nhưng khi tôi thử thực hiện điều này từ luồng chính được cho là tạo ra luồng quan sát, tôi gặp lỗi.
lớp Master(Chủ đề):
def __init__(bản thân, dirlist):
self.dirlist = danh sách dirlist
def run(tự):
người quan sát = {}
cho d trong dirlist:
người quan sát[d] = Người quan sát()
người quan sát[d].bắt đầu()
trong khi Đúng:
time.sleep(3600)
master_thread = Master(danh sách thư mục)
master_thread.bắt đầu()
Phải Master.bắt đầu
Cuộc gọi đưa ra kết quả:
RuntimeError: thread.__init__() không được gọi
Điều này thực sự rất lạ với tôi.
Tôi không hiểu sự khác biệt giữa hai trường hợp này là gì.
Có ai có thể tìm ra giải pháp cho vấn đề của tôi không?
Không hiểu sao việc làm theo lại không tạo ra lỗi và tôi không hiểu tại sao.
lớp Master(Chủ đề):
def set(self, dirlist):
self.dirlist = danh sách dirlist
def run(tự):
người quan sát = {}
cho d trong dirlist:
người quan sát[d] = Người quan sát()
người quan sát[d].bắt đầu()
trong khi Đúng:
time.sleep(3600)
master_thread = Chủ()
master_thread.set(danh sách thư mục)
master_thread.bắt đầu()
>>> master_thread.bắt đầu()
RuntimeError: thread.__init__() không được gọi
Hãy chắc chắn rằng Chủ.__init__
Gọi Luồng.__init__()
:
lớp Master(Chủ đề):
def __init__(bản thân, dirlist):
siêu(Chủ, bản thân).__init__()
self.dirlist = danh sách dirlist
Tôi là một lập trình viên xuất sắc, rất giỏi!