Pythonでスレッドを使用して複数のTelnetホストに接続したいが、私は解決できない問題について遭遇した。Pythonで複数のtelnet接続スレッドを使用するとタイムアウトと高いCPU負荷の問題が発生する
MAC OS Xライオン/ Pythonの一般的には2.7import 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アドレスのホスト名エントリを既に追加しました。これは違いはありませんでした。
ご協力いただきありがとうございます。
敬具
senexi
誤動作しているスレッドのスタックトレースを取得して、どこにスタックされているかを確認する方法はありますか? – NPE
"traceback.print_stack()"をインクルードしましたが、新しい情報は表示されませんでした。 telnet_con.open()で常にハングします。私もスレッドを使わないでバージョンを試しました。それでも接続を確立するのに時間がかかりますが、CPU負荷がそれ以上上がらないという問題があります。残念ながら、私は自分のアプリケーションでスレッドを使用する必要があります... -/ – senexi