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% に達します。
さらに奇妙なのは、配列内のスレッドを 1 つだけ使用している場合、常に問題なく動作するという事実です。したがって、複数のスレッドの使用と関係があるに違いありません。
DNS ルックアップの問題を回避するために、すべての IP アドレスにホスト名エントリを追加しました。これは違いはありませんでした。
よろしくお願いします。
よろしくお願いします
セネキシ