国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 多線程實現檢測服務器在線情況

2020-01-04 17:55:32
字體:
來源:轉載
供稿:網友

本文給大家分享的是Python使用多線程通過ping命令檢測服務器的在線狀況,給大家了內網和外網的2個例子,有需要的小伙伴可以參考下。

需要ping一個網段所有機器的在線情況,shell腳步運行時間太長,用python寫個多線程ping吧,代碼如下:

 

  1. #!/usr/bin/python 
  2. #coding=utf-8 
  3. ''
  4. Created on 2015-8-4 
  5. @author: Administrator 
  6. ''
  7.  
  8. import threading,subprocess 
  9. from time import ctime,sleep,time 
  10. import Queue 
  11.  
  12. queue=Queue.Queue() 
  13.  
  14. class ThreadUrl(threading.Thread): 
  15. def __init__(self,queue): 
  16. threading.Thread.__init__(self) 
  17. self.queue=queue 
  18.  
  19. def run(self): 
  20. while True: 
  21. host=self.queue.get() 
  22. ret=subprocess.call('ping -c 1 -w 1 '+host,shell=True,stdout=open('/dev/null','w')) 
  23. if ret: 
  24. print "%s is down" % host 
  25. else
  26. print "%s is up" % host 
  27. self.queue.task_done() 
  28.  
  29. def main(): 
  30. for i in range(100): 
  31. t=ThreadUrl(queue) 
  32. t.setDaemon(True) 
  33. t.start() 
  34. for host in b: 
  35. queue.put(host) 
  36. queue.join() 
  37.  
  38. a=[] 
  39. with open('ip.txt') as f: 
  40. for line in f.readlines(): 
  41. a.append(line.split()[0]) 
  42. #print a 
  43.  
  44. b=['192.168.3.'+str(x) for x in range(1,254)] #ping 192.168.3 網段 
  45. start=time() 
  46. main() 
  47. print "Elasped Time:%s" % (time()-start) 
  48.  
  49. #t2=threading.Thread(target=move,args=('fff',)) 
  50. #threads.append(t2) 
  51.  
  52. ''
  53. for i in a: 
  54. print ctime() 
  55. ping(i) 
  56. sleep(1) 
  57.  
  58. if __name__ == '__main__'
  59. for t in range(len(a)): 
  60. #t.setDaemon(True) 
  61. threads[t].start() 
  62. #t.join() 
  63. print "All over %s" % ctime() 
  64. ''

效果如下:

python 多線程實現檢測服務器在線情況

平一個網段只要2.7s左右,夠快!!!

再給大家分享一個檢測外網服務器的方法及代碼

經常使用python檢測服務器是否能ping通, 程序是否正常運行(檢測對應的端口是否正常)

以前使用shell腳本的寫法如下:

PINGRET=$( pingwww.baidu.com-c 2 | grep "icmp_" ); if [ -z $PINGRET ]; then echo "ping fail"; else echo "ping ok"; fi

或者

ping -c 2www.baidu.com|grep"icmp_" && echo 'ping ok' || echo 'ping fail'

代碼示例:

 

 
  1. #!/usr/bin/python 
  2. # encoding=utf-8 
  3. # Filename: net_is_normal.py 
  4. import os 
  5. import socket 
  6. import subprocess 
  7.  
  8.  
  9. #判斷網絡是否正常 
  10. server='www.baidu.com' 
  11. #檢測服務器是否能ping通,在程序運行時,會在標準輸出中顯示命令的運行信息 
  12. def pingServer(server): 
  13. result=os.system('ping '+server+' -c 2'
  14. if result: 
  15. print '服務器%s ping fail' % server 
  16. else
  17. print '服務器%s ping ok' % server 
  18. print result 
  19.  
  20. #把程序輸出定位到/dev/null,否則會在程序運行時會在標準輸出中顯示命令的運行信息  
  21. def pingServerCall(server): 
  22. fnull = open(os.devnull, 'w'
  23. result = subprocess.call('ping '+server+' -c 2', shell = True, stdout = fnull, stderr = fnull) 
  24. if result: 
  25. print '服務器%s ping fail' % server 
  26. else
  27. print '服務器%s ping ok' % server 
  28. fnull.close() 
  29.  
  30. #可用于檢測程序是否正常,如檢測redis是否正常,即檢測redis的6379端口是否正常 
  31. #檢測ssh是否正常,即檢測ssh的22端口是否正常 
  32. def check_aliveness(ip, port): 
  33. sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  34. sk.settimeout(1) 
  35. try
  36. sk.connect((ip,port)) 
  37. print 'server %s %d service is OK!' %(ip,port) 
  38. return True 
  39. except Exception: 
  40. print 'server %s %d service is NOT OK!' %(ip,port) 
  41. return False 
  42. finally
  43. sk.close() 
  44. return False 
  45.  
  46. if __name__=='__main__'
  47. pingServerCall(server) 
  48. pingServer(server) 
  49. check_aliveness('192.168.230.128', 6379) 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇文区| 平远县| 韩城市| 库伦旗| 宜章县| 侯马市| 临泉县| 托克逊县| 兰坪| 南宫市| 明光市| 汝南县| 松阳县| 于田县| 明光市| 揭阳市| 鄂伦春自治旗| 荔波县| 新野县| 木里| 太仆寺旗| 皮山县| 瓮安县| 略阳县| 苏尼特左旗| 双辽市| 峨边| 越西县| 康定县| 兴业县| 潮州市| 明水县| 慈利县| 中卫市| 营山县| 临城县| 甘德县| 栾城县| 津市市| 班戈县| 巴南区|