Python 2.7 使用pyping(带root)的python多线程ping返回了所有成功,怎么了

Python 2.7 使用pyping(带root)的python多线程ping返回了所有成功,怎么了,python-2.7,python-multithreading,Python 2.7,Python Multithreading,尝试使用pyping库(使用root用户基于ICMP的ping)在python中开发多线程ping应用程序 结果是根据上次IP结果返回所有成功/失败。下面给出了代码,我做错了什么。。(代码如下所示) 127.0.0.1是应该ping的环回。 192.168.1.20未退出,应失败 (请不要建议我为什么不应该使用root或其他方法…) 谢谢 --------当前结果------------- (这里0=成功,1=每个结果结束时失败) -------------代码------------- 您可能

尝试使用pyping库(使用root用户基于ICMP的ping)在python中开发多线程ping应用程序

结果是根据上次IP结果返回所有成功/失败。下面给出了代码,我做错了什么。。(代码如下所示)

127.0.0.1是应该ping的环回。 192.168.1.20未退出,应失败

(请不要建议我为什么不应该使用root或其他方法…) 谢谢

--------当前结果-------------

(这里0=成功,1=每个结果结束时失败) -------------代码-------------


您可能已经了解了这一点,但将threadlock移动到ping上方一行会产生所需的行为:

def run(self):
    #here do ping
    threadLock.acquire()  
    self.a = pyping.ping(self.ip)      
    print(self.ip , '->' ,self.a.destination_ip , '->' , self.a.ret_code)
    threadLock.release()

('192.168.1.20', '->', '192.168.1.20', '->', 1)
('127.0.0.1', '->', '127.0.0.1', '->', 0)
('4.3.2.1', '->', '4.3.2.1', '->', 1)
('8.8.8.8', '->', '8.8.8.8', '->', 0)
('172.29.200.1', '->', '172.29.200.1', '->', 0)
('1.2.3.4', '->', '1.2.3.4', '->', 1)

您可能已经了解了这一点,但将threadlock移动到ping上方一行会产生所需的行为:

def run(self):
    #here do ping
    threadLock.acquire()  
    self.a = pyping.ping(self.ip)      
    print(self.ip , '->' ,self.a.destination_ip , '->' , self.a.ret_code)
    threadLock.release()

('192.168.1.20', '->', '192.168.1.20', '->', 1)
('127.0.0.1', '->', '127.0.0.1', '->', 0)
('4.3.2.1', '->', '4.3.2.1', '->', 1)
('8.8.8.8', '->', '8.8.8.8', '->', 0)
('172.29.200.1', '->', '172.29.200.1', '->', 0)
('1.2.3.4', '->', '1.2.3.4', '->', 1)

我也在使用pmap看到同样的行为。看起来pyping不是线程安全的吗?我也看到了使用pmap的相同行为。看起来pyping不是线程安全的?
def run(self):
    #here do ping
    threadLock.acquire()  
    self.a = pyping.ping(self.ip)      
    print(self.ip , '->' ,self.a.destination_ip , '->' , self.a.ret_code)
    threadLock.release()

('192.168.1.20', '->', '192.168.1.20', '->', 1)
('127.0.0.1', '->', '127.0.0.1', '->', 0)
('4.3.2.1', '->', '4.3.2.1', '->', 1)
('8.8.8.8', '->', '8.8.8.8', '->', 0)
('172.29.200.1', '->', '172.29.200.1', '->', 0)
('1.2.3.4', '->', '1.2.3.4', '->', 1)