python线程卡死问题解决_python 多线程执行远程主机命令,卡住

博客讲述了在使用Python的paramiko库进行SSH连接远程主机并执行命令时遇到线程卡死的问题。具体表现为在调用`stderr.readlines()`时程序卡住,无法通过`Ctrl+C`停止,只能通过`kill`进程结束。调试显示可能的死锁发生在`paramiko`库的`buffered_pipe.py`文件中,线程在等待`waiter.acquire()`时被阻塞。问题可能与特定主机和命令有关,其他命令如`ls`则能正常运行。博主寻求对此问题有经验的大神提供帮助。
摘要由CSDN通过智能技术生成

# -*- coding: utf-8 -*-

import paramiko

s = paramiko.SSHClient()

s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

s.connect('******',22,'*****','****')

print('connected!')

while True:

i = raw_input('shuru:')

stdin,stdout,stderr = s.exec_command('cd /home/pregw/src/gateway/info;cat *.info')

print('exec_command over!')

if i == 'y':

errs = stderr.readlines()

print(errs)

else:

lines = stdout.readlines()

print(len(lines))

在下面这行直接卡住不懂,ctrl+c无法停止,只能kill进程

errs = stderr.readlines()

跟进去调试发现卡在调试信息的最后一行不懂了,貌似是死锁了?一直在这个函数,s也跟不进去

-> waiter.acquire()

这个只是单写了个测试程序,之前的程序是多线程在多主机执行任务;两个程序出现的错误相同,

最重要的是,远程其它主机都正常,唯独其中一台主机读错误时会卡在哪里,而且唯独远程执行这个命令会卡住,其它命令例如'ls',可以正常打印出stderr.readlines() 的值为空列表[],有没有大神知道是什么原因?

下面是调试过程:

--Call--

> /usr/lib/python2.6/site-packages/paramiko/file.py(244)readlines()

-> def readlines(self, sizehint=None):

(Pdb) self

>>

(Pdb) n

> /usr/lib/python2.6/site-packages/paramiko/file.py(256)readlines()

-> lines = []

(Pdb) n

> /usr/lib/python2.6/site-packages/paramiko/file.py(257)readlines()

-> bytes = 0

(Pdb)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值