为什么这段代码没有提供来自"服务器的所有列表变量"清单?我认为它应该打印所有这些主机,而不是只打印列表中的最后一个变量。
#!/usr/bin/python
import time
import threading
from threading import Thread
import os,sys
class InitThread(Thread):
def __init__(self,threadID, host):
self.host = host
self.threadID = threadID
super(InitThread, self).__init__()
def run(self):
print host
servers=[ 'yahoo.com','google.com','10.0.0.10','10.0.0.0.11','10.0.0.12']
jobs = []
threadID = 1
for host in servers:
t=InitThread(threadID,host)
jobs.append(t)
threadID += 1
for t in jobs:
t.start()
t.join()
执行上述脚本后,我将得到如下输出,
# python foo.py
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
答案 0 :(得分:2)
您正在host
方法中打印类变量run
,而不是实例变量host
。由于该变量在InitThread
的所有实例之间共享,并且最后一次赋值使其成为列表的最后一个元素,因此您将始终获得列表的最后一个元素。
您可以通过预先self
来修复它。
#!/usr/bin/python
import time
import threading
from threading import Thread
import os,sys
class InitThread(Thread):
def __init__(self,threadID, host):
super(InitThread, self).__init__()
self.host = host
self.threadID = threadID
def run(self):
print self.host