我需要运行与dirlist列表元素数量相同的Observer类线程。
当我在Python控制台中运行它时,它能够正常工作。
class Observer(Thread):
def run(self):
naptime = random.randint(1,10)
print(self.name + ' starting, running for %ss.' % naptime)
time.sleep(naptime)
print(self.name + ' done')
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
但是当我尝试从一个主线程中执行此操作,该主线程应该生成观察者线程时,我会遇到错误。
class Master(Thread):
def __init__(self, dirlist):
self.dirlist = dirlist
def run(self):
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
while True:
time.sleep(3600)
master_thread = Master(dirlist)
master_thread.start()
调用 Master.start
的结果是:
RuntimeError: thread.__init__() not called
这对我来说看起来很奇怪。
我无法理解两种情况之间的区别。
有人能找出解决我的问题的方法吗?
不知何故,以下代码没有引发错误,我不明白为什么。
class Master(Thread):
def set(self, dirlist):
self.dirlist = dirlist
def run(self):
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
while True:
time.sleep(3600)
master_thread = Master()
master_thread.set(dirlist)
master_thread.start()
for d in self.dirlist:
。当前的代码中for d in dirlist:
指向一个全局变量。为了成为正确的 示例,代码应该是完整的,并且提供一个最小的Observer
实现,只包含可直接使用的代码(这意味着不要从解释器中复制 Python 提示符和缩进)。请编辑您的问题以修正示例。最后,请问您使用的是哪个版本的Python? - outis