我想在 python 中使用线程连接到多个 telnet 主机,但我偶然发现了一个我无法解决的问题。
在 MAC OS X Lion / Python 2.7 上使用以下代码
import threading,telnetlib,socket
class ReaderThread(threading.Thread):
def __init__(self, ip, port):
threading.Thread.__init__(self)
self.ip = ip
self.port = port
self.telnet_con = telnetlib.Telnet()
def run(self):
try:
print 'Start %s' % self.ip
self.telnet_con.open(self.ip,self.port,30)
print 'Done %s' % self.ip
except socket.timeout:
print 'Timeout in %s' % self.ip
def join(self):
self.telnet_con.close()
ta = []
t1 = ReaderThread('10.0.1.162',9999)
ta.append(t1)
t2 = ReaderThread('10.0.1.163',9999)
ta.append(t2)
for t in ta:
t.start()
print 'Threads started\n'
一般来说,它可以工作,但是任何一个线程(并不总是同一个)需要很长时间才能连接(大约 20 秒,有时甚至会超时)。在非常长的连接时间内(在全本地网络中),cpu 负载也上升到 100%。
更奇怪的是,如果我只使用数组中的一个线程,它总是可以完美运行。所以肯定跟多线程的使用有关系。
我已经为所有 IP 地址添加了主机名条目以避免 DNS 查找问题。这并没有什么不同。
在此先感谢您的帮助。
最好的祝福
森西